首页 文章

检查Laravel Middleware中的用户名

提问于
浏览
0

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

使用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);
    }
}

2 回答

  • 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

    为了获取用户/电子邮件等用户的详细信息,您需要使用$ request-> user()而不是Auth :: user()

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

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

相关问题