如何解决尝试获取非对象的属性“标头”中间件角色身份验证
我想创建两个身份验证角色(管理员和用户)。一切正常,但例如,当我以用户身份登录并尝试访问管理仪表板时,我想重定向到用户仪表板,而不是因为我不能以用户身份访问它......问题是当我尝试以用户身份访问管理仪表板,我收到此错误:Trying to get property 'headers' of non-object
这是我的两个中间件...
管理中间件:
public function handle(Request $request,Closure $next)
{
if (Auth::check() && Auth::user()->role == 'admin'){
return $next($request);
}else{
redirect()->route('login');
}
}
用户中间件:
public function handle(Request $request,Closure $next)
{
if (Auth::check() && Auth::user()->role == 'user'){
return $next($request);
}else{
redirect()->route('login');
}
}
我确实将 RedirectIfAuthenticated 中间件编辑为这个。
public function handle(Request $request,Closure $next,...$guards)
{
$guards = empty($guards) ? [null] : $guards;
foreach ($guards as $guard) {
/*if (Auth::guard($guard)->check()) {
return redirect(RouteServiceProvider::HOME);
}*/
if (Auth::guard($guard)->check() && Auth::user()->role == 'user') {
return redirect()->route('user.dashboard');
}
elseif (Auth::guard($guard)->check() && Auth::user()->role == 'admin'){
return redirect()->route('admin.dashboard');
}
}
return $next($request);
}
解决方法
在中间件中,重要的是处理所有情况并相应地return
重定向:
return redirect()->route('login');
,
你应该返回重定向
管理中间件:
public function handle(Request $request,Closure $next)
{
if (Auth::check() && Auth::user()->role == 'admin'){
return $next($request);
}else{
return redirect()->route('login');
}
}
用户中间件:
public function handle(Request $request,Closure $next)
{
if (Auth::check() && Auth::user()->role == 'user'){
return $next($request);
}else{
return redirect()->route('login');
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。