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');
}
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
.