Laravel 登录后将管理员重定向到仪表板
我需要在管理员用户登录后将其重定向到仪表板。为了实现这一点,我重写了位于Laravel 登录后将管理员重定向到仪表板,laravel,laravel-5,laravel-5.2,Laravel,Laravel 5,Laravel 5.2,我需要在管理员用户登录后将其重定向到仪表板。为了实现这一点,我重写了位于RedirectUserstrait中的redirectPath()方法。代码如下: 公共函数重定向路径() { 如果(属性_存在($this,'redirectPath')){ 返回$this->redirectPath; } //修改------------------------------ if(request()->user()->hasRole('admin')){ 返回“/仪表板”; } //末端修饰-----
RedirectUsers
trait中的redirectPath()
方法。代码如下:
公共函数重定向路径()
{
如果(属性_存在($this,'redirectPath')){
返回$this->redirectPath;
}
//修改------------------------------
if(request()->user()->hasRole('admin')){
返回“/仪表板”;
}
//末端修饰---------------------------
返回属性_存在($this,'redirectTo')?$this->redirectTo:'/home';
}
问题
仪表板重定向仅在某些情况下有效:
- 在第一次登录时,管理员被重定向到主页李>
- 在随后的登录中,管理员被重定向到仪表板
- 但如果运行了
命令,admin将再次重定向到主页php-artisan-cache:clear
为什么会发生这种情况以及如何正确实现此功能?您可以在
AuthController.php
中创建authenticated
方法,而不是覆盖redirectPath()
,如果用户成功通过身份验证后存在此方法,则将调用它:
class AuthController extends Controller
use AuthenticatesAndRegistersUsers, ThrottlesLogins;
...
public function authenticated()
{
if(Auth::guard($this->getGuard())->user()->hasRole('admin')){
return redirect('/dashboard');
}
return redirect()->intended($this->redirectPath());
}
}
您可以在
AuthController.php
中创建authenticated
方法,而不是重写redirectPath()
,如果在用户成功身份验证后存在该方法,则将调用该方法:
class AuthController extends Controller
use AuthenticatesAndRegistersUsers, ThrottlesLogins;
...
public function authenticated()
{
if(Auth::guard($this->getGuard())->user()->hasRole('admin')){
return redirect('/dashboard');
}
return redirect()->intended($this->redirectPath());
}
}
中间件呢
创建一个名为RedirectIfAdmin的中间件
然后将其放入Homecontroller结构中
我想这可能更像是拉威尔的想法。中间件怎么样
创建一个名为RedirectIfAdmin的中间件
然后将其放入Homecontroller结构中
我想这可能更像拉威尔的想法。永远不要更改供应商文件夹中的任何文件强> 当您尝试更新软件包时,它将导致问题,因为它将覆盖所有旧的软件包!此外,默认情况下,git不会跟踪供应商文件夹中的任何文件 以下是备选方案及其工作原理: 在
AuthController.php
class AuthController extends Controller {
protected $redirectTo = '/user/dashboard';
}
然后,在控制器中,您可以执行以下操作:
if(Auth::guard($this->getGuard())->user()->hasRole('admin')){
$this->redirectTo = '/dashboard'
}
将会发生什么:
public function redirectPath()
{
if (property_exists($this, 'redirectPath')) {
return $this->redirectPath;
}
return property_exists($this, 'redirectTo') ? $this->redirectTo : '/home';
}
每当调用
redirectPath
函数的任何方法都会检查redirectPath
的属性是否存在。如果存在,请使用提供的url。如果没有,请使用默认值“/home”不要更改供应商文件夹中的任何文件强>
当您尝试更新软件包时,它将导致问题,因为它将覆盖所有旧的软件包!此外,默认情况下,git不会跟踪供应商文件夹中的任何文件
以下是备选方案及其工作原理:
在AuthController.php
class AuthController extends Controller {
protected $redirectTo = '/user/dashboard';
}
然后,在控制器中,您可以执行以下操作:
if(Auth::guard($this->getGuard())->user()->hasRole('admin')){
$this->redirectTo = '/dashboard'
}
将会发生什么:
public function redirectPath()
{
if (property_exists($this, 'redirectPath')) {
return $this->redirectPath;
}
return property_exists($this, 'redirectTo') ? $this->redirectTo : '/home';
}
每当调用
redirectPath
函数的任何方法都会检查redirectPath
的属性是否存在。如果存在,请使用提供的url。如果没有,请使用默认值“/home”谢谢,但没有任何更改永远不要更改供应商文件中的任何内容。它将在以后更新时引起问题package@geckob你为什么否决我的答案?谁更改了供应商文件夹中的文件?我们从未更改过供应商文件夹中的任何内容,我们只是在app\Http\Controllers\Auth
中的AuthController.php
上进行更改,使用AuthenticatesAndRegistersUsers
和ThrottlesLogins
traits@geckob你太有趣了!似乎您不知道,只需在类上创建一个同名的方法,就可以覆盖trait的方法。@RifkiAriaGumelar:当时我错了。我知道这是可能的。但我以为你的意思是相反的。但我仍然不认为这是解决问题的方法。你能修改一下你的答案吗?这样我就可以修改了。现在,它被锁定了,但没有任何更改。永远不要更改供应商文件中的任何内容。它将在以后更新时引起问题package@geckob你为什么否决我的答案?谁更改了供应商文件夹中的文件?我们从未更改过供应商文件夹中的任何内容,我们只是在app\Http\Controllers\Auth
中的AuthController.php
上进行更改,使用AuthenticatesAndRegistersUsers
和ThrottlesLogins
traits@geckob你太有趣了!似乎您不知道,只需在类上创建一个同名的方法,就可以覆盖trait的方法。@RifkiAriaGumelar:当时我错了。我知道这是可能的。但我以为你的意思是相反的。但我仍然不认为这是解决问题的方法。你能修改一下你的答案吗?这样我就可以修改了。现在,它被锁定了。我添加了一个答案作为另一个备选答案。我添加了一个答案作为另一个备选答案。我不会更改供应商文件夹中的任何内容,但无论如何,感谢您的建议。我曾经尝试过这种方法,正如我的问题中所指出的,但有时却没有work@AlexanderLomia:真的吗?我很高兴知道它什么时候不起作用。我不会更改供应商文件夹中的任何内容,不过还是谢谢你的建议。我曾经尝试过这种方法,正如我的问题中所指出的,但有时却没有work@AlexanderLomia:真的吗?我非常高兴知道它什么时候不起作用