Search code examples
phpauthenticationlaravel-5.3

Laravel 5.3 redirect after authentication


I have a problem with Laravel 5.3 authentication. I want to redirect users after login. If I wanted to redirect all users to same route i know, I can change attribute protected $redirectTo = 'mypath', but I want to redirect users, based on their type so I need custom logic. In the docs it sais, I should make

protected function redirectTo(){
  //my logic goes here
}

but my function keeps getting ignored. In the docs it sais, my function should override $redirectTo attribute, but even if i delete it, it still goes to default route ("/home"). If I change the attribute value it redirects me to correct path, but my function still gets ignored.

https://laravel.com/docs/5.3/authentication#included-authenticating

My Login controller looks like this:

namespace App\Http\Controllers\Auth;
use App\Http\Controllers\Controller;
use Illuminate\Foundation\Auth\AuthenticatesUsers;
use Illuminate\Support\Facades\Auth;

class LoginController extends Controller
{

    use AuthenticatesUsers;

    //protected $redirectTo = '/';
    protected function redirectTo()
    {
        return redirect('admin/home');
    }

    public function __construct()
    {
        $this->middleware('guest', ['except' => 'logout']);
    }

}

EDIT: If I name my function authenticated() instead of redirectTo(), it works as planned.

protected function redirectTo()
{
      return redirect('admin/home');
}

Solution

  • Laravel uses RedirectUsers::redirectPath() to get redirect path.

    It only checks a property redirectTo.

    If you want apply custom logic - just overwrite redirectPath() method in your controller.

    namespace App\Http\Controllers\Auth;
    use App\Http\Controllers\Controller;
    use Illuminate\Foundation\Auth\AuthenticatesUsers;
    use Illuminate\Support\Facades\Auth;
    
    class LoginController extends Controller
    {
    
        use AuthenticatesUsers;
    
        //protected $redirectTo = '/';
        public function redirectPath()
        {
            // ...
            // custom logic here 
            // ...
    
            return '/my/custom/url/here';
        }
    
        public function __construct()
        {
            $this->middleware('guest', ['except' => 'logout']);
        }
    
    }
    

    The same approach will work for RegisterController and ResetPasswordController.