我需要在登录后根据其角色将用户重定向到不同的地方。
逻辑很简单。我试图把它放在 Nova
redirectPath()
的LoginController.php
函数中,但我有一个非常奇怪的行为 - 有时在登录后我到达正确的位置,有时 Nova 将我重定向到面板。
有什么想法吗?
经过几个小时的调查,我发现解决方案非常简单。
我所要做的就是将以下功能添加到 nova LoginController:
protected function sendLoginResponse(Request $request)
{
$request->session()->regenerate();
$this->clearLoginAttempts($request);
$redirectPath = $this->redirectPath();
redirect()->setIntendedUrl($redirectPath);
return redirect()->intended($redirectPath);
}
解释:
此功能在traitAuthenticatesUsers中实现。
intended
函数(Redirector
类的成员)创建重定向响应,基于先前预期的位置,如果不存在 - 在给定的 url 上。
如果在会话中没有设置
url.intended
,用户将被重定向到由LoginController::redirectPath
生成的url。 但是,如果会话中确实存在url.intended
的条目,我们需要删除它以强制将用户重定向到我们感兴趣的url。
我看到的唯一问题是我们失去了将用户重定向到他注销前所在的同一页面的功能。因此,作为开发人员,这是一个简单的选择问题……
Nova 4
的干净解决方案在这里,我没有在Nova 3
或以下测试过。
里面
NovaServiceProvider
更新下面的方法
public function register()
{
\Laravel\Nova\Nova::$initialPath = '/resources/users'; //update it to any valid nova path
}
快乐编码:)