我们可以在登录LoginController后覆盖此属性以重定向用户:
protected $redirectTo = '/home';
以下是文档中的陈述:
如果重定向路径需要自定义生成逻辑,您可以定义一个 redirectTo方法而不是redirectTo属性:
受保护的函数redirectTo(){
//}
但无论条件如何,它总是会重定向到'/home';
。
protected function redirectTo()
{
if (Auth::user()->role==0) {
return '/volunteer';
} else {
return '/donor';
}
}
如果存在某个方法,它将使用它,否则将使用该属性。但即使该方法存在,它看起来仍在使用属性。
但是,覆盖authenticated()
或sendLoginResponse()
功能可以正常工作。
protected function authenticated()
{
if (Auth::user()->role==0) {
return redirect('/volunteer') ;
} else {
return redirect('/donor');
}
}
redirectTo()
方法有什么问题?以下是这些方法的GitHub source code。
我使用 Laravel版本5.3.28 。
答案 0 :(得分:11)
这是 Laravel v5.3.28
中src / Illuminate / Foundation / Auth / RedirectsUsers.php中的redirectPath()
方法
public function redirectPath()
{
return property_exists($this, 'redirectTo') ? $this->redirectTo : '/home';
}
在更高版本 5.3.29及更高版本中。使用commit:
在文件中进行了更改Add auth redirect path generation method (#16896)
public function redirectPath()
{
if (method_exists($this, 'redirectTo')) {
return $this->redirectTo();
}
return property_exists($this, 'redirectTo') ? $this->redirectTo : '/home';
}
所以这部分文档仅适用于Laravel版本5.3.29及更高版本
如果重定向路径需要自定义生成逻辑,您可以定义一个 redirectTo方法而不是redirectTo属性:
受保护的函数redirectTo(){//}
v5.3.28的解决方案
要使redirectTo()
方法在v5.3.28中有效,请在src / Illuminate / Foundation / Auth / RedirectsUsers.php中的redirectPath()
方法中手动添加。
if (method_exists($this, 'redirectTo')) {
return $this->redirectTo();
}
答案 1 :(得分:7)
简单解决方案
覆盖redirectPath()
而不是redirectTo()
。
使用原始字符串返回:
protected function redirectPath()
{
if (Auth::user()->role==0) {
return '/volunteer';
} else {
return '/donor';
}
}
或覆盖redirectPath()
到Laravel 5.3。 29 redirectPath()
版本,然后您的redirectTo()
方法将有效。
public function redirectPath()
{
if (method_exists($this, 'redirectTo')) {
return $this->redirectTo();
}
return property_exists($this, 'redirectTo') ? $this->redirectTo : '/home';
}
为什么redirectTo()无法正常工作
在干净的Laravel v.5.3.29 +默认身份验证中,经过测试覆盖了redirectPath()
中的redirectTo()
或App\Http\Controllers\Auth\LoginController.php
方法,它们按预期工作。
redirectTo()方法的示例
文档说:
如果重定向路径需要自定义生成逻辑,则可以定义redirectTo方法而不是redirectTo属性。
因此,该函数看起来应该是这样的:
protected function redirectTo()
{
if(condition) {
return "/your/path";
}
return "/your/secondpath";
}
答案 2 :(得分:1)
redirectTo
重定向完成登录或注册的用户。 app/Http/Middleware/RedirectIfAuthenticated.php
if (Auth::guard($guard)->check()) {
return redirect('/home');
}
答案 3 :(得分:0)
我认为问题出在web.php路由。将默认的“ /”路由设置为指向登录页面后,问题消失了。
Route::get('/', function () {
return redirect(route('login'));
});