我最近开始学习Laravel。我在Laravel应用的默认LoginController中覆盖了redirectTo()
方法。
class LoginController extends Controller
{
use AuthenticatesUsers;
/**
* Where to redirect users after login.
*
* @var string
*/
protected $redirectTo = RouteServiceProvider::HOME;
/**
* Create a new controller instance.
*
* @return void
*/
public function __construct()
{
$this->middleware('guest')->except('logout');
}
protected function redirectTo()
{
return '/dashboard';
}
}
它工作正常,但是如果已通过身份验证的用户尝试再次登录(该用户尚未注销并尝试访问'/ login'路由),则该用户将被重定向到'/主页”,显然是RouteServiceProvider :: HOME常量。我可以简单地更改RouteServiceProvider :: HOME常量,但是肯定有一个更好的选择。同样,如果重定向取决于用户的角色,那么简单地更改常量将无济于事。那么,重写RouteServiceProvider :: HOME常量的正确方法是什么?
答案 0 :(得分:2)
这不是方法,而是常量。
您可以在app\Providers\RouteServiceProviders.php
中进行更改
您会发现以下行:
public const HOME = '/home';
根据您的需要进行更改。 如果您不想更改它,而只能在
中本地更改protected $redirectTo = RouteServiceProvider::HOME;
行到
protected $redirectTo = '/whatever'
答案 1 :(得分:0)
在 Laravel8 中你可以覆盖 LoginController 中的以下方法
protected function authenticated(Request $request, $user)
{
return redirect('/dashboard');
}
在 app\Http\Middleware\RedirectIfAuthenticated.php 中
public function handle($request, Closure $next, $guard = null)
{
if (Auth::guard($guard)->check()) {
return redirect('/dashboard');
//return redirect(RouteServiceProvider::HOME);
}
return $next($request);
}
答案 2 :(得分:0)
如果您需要动态属性,您也可以覆盖 redirectTo 方法。
/**
* @return string
*/
public function redirectTo() : string
{
return '/dashboard';
}