Laravel中Auth::check()仅在中间件生效,构造函数调用返回false求助
问题解决:Laravel中构造函数里
auth()->check()始终返回false 核心原因:Laravel的认证中间件是在控制器构造函数执行完成后才运行的,所以你在构造函数里直接调用
auth()->check()时,用户的认证会话还没被初始化,自然返回false。解决方法:
- 改用中间件闭包处理认证检查
把认证逻辑放到构造函数内的中间件闭包里,这样会在中间件执行流程中运行,此时认证会话已经初始化:public function __construct(AffiliateRepository $affiliateRepo) { $this->affiliateRepo = $affiliateRepo; $this->middleware(function ($request, $next) { // 这里能正确获取用户认证状态 dd(auth()->check()); return $next($request); }); } - 将认证检查移到控制器方法中
直接在具体的业务方法里调用auth()->check(),此时中间件已经执行完毕,认证状态有效:public function indexPage() { dd(auth()->check()); // 这里返回正确结果 // 其他业务逻辑 }
- 改用中间件闭包处理认证检查
额外提示:如果之后要恢复注释的中间件,注意
guest中间件会限制已认证用户访问,若你的控制器需要已认证用户访问,要替换成auth中间件。
内容的提问来源于stack exchange,提问作者Laught Time
相关产品推荐
相关产品推荐

