2016-11-12 38 views
0

我需要检查用户是否已登录,并在我的中间件中检查其用户名,以验证他们是否是管理员或不限制访问某个页面。我如何获得他们的用户名?检查Laravel中间件的用户名

使用Auth :: user()给我一个来自另一个中间件的错误。

ErrorException in VerifyCsrfToken.php line 136: 
Trying to get property of non-object 

路线

Route::get('admin', ['middleware' => 'admin', function() { 
    echo "You're an admin!"; 
}]); 

中间件

class VerifyAdmin 
{ 
    public function handle($request, Closure $next, $guard = null) 
    { 
      if (Auth::user()->username == "enayet123") 
       return $next($request); 
    } 
} 
+0

您可以显示您的路由文件! –

+0

我真的不明白为什么路线文件会影响这个? –

+1

你的laravel版本是什么? –

回答

0

你必须返回

return $next($request); 

即使你的条件未能因此,未来中间件可以请求。如果您将该条件移到条件之外,应该解决您的问题。

您的代码应该是这样的:

class VerifyAdmin 
{ 
    public function handle($request, Closure $next, $guard = null) 
    { 
      if (Auth::user()->username == "enayet123") { 
       // Do the thing you want ... (return or redirect to somewhere else) 
       redirect()->route('homepage'); 
      } 
      return $next($request); 
    } 
} 

你应该总是return $next($request)这是需要从一个特定的中间件

+0

如果中间件的用户名是“enayet123”,那么中间件就意味着将请求传递到下一个中​​间件,这就是我为什么这样做的原因。如果检查失败,用户应该被重定向到主页'/' –

+0

@EnayetHussain - 检查上面更新的代码并尝试实施它,它应该解决您的问题 –

0

通过代码/请求为了获得用户的详细信息,如用户名/向您发送电子邮件需要使用$请求 - >用户()而不是验证::用户()

你应该那么如果用户检查是一个管理员,通过在用户模型中创建一个方法并在中间件中调用该方法

class VerifyAdmin 
{ 
    public function handle($request, Closure $next, $guard = null) 
    { 
     $user = $request->user(); 
     if ($user && $user->isAdmin()) { 
      return $next($request); 
     } 
     return redirect('/'); 
    } 
}