检查Laravel Middleware中的用户名

时间:2016-11-12 18:48:33

标签: laravel middleware

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

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

(define random-abcd
  (let ([n (random 4)])
    (cond [(equal? n 0) 'A]
          [(equal? n 1) 'B]
          [(equal? n 2) 'C]
          [else 'D])))

路线

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

中间件

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

2 个答案:

答案 0 :(得分:0)

你必须返回

return $next($request);

即使您的条件失败,下一个中间件也可以拥有该请求。如果你把它移到条件if之外,那应该解决你的问题。

您的代码应如下所示:

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)这是传递特定中间件

的代码/请求所必需的

答案 1 :(得分:0)

要获取用户/电子邮件等用户详细信息,您需要使用 $ request-&gt; user()而不是 Auth :: user() < / p>

然后,您应该通过在用户模型中创建方法并在中间件中调用该方法来检查用户是否为管理员

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