Laravel自定义登录中Auth::user()返回null的问题修复方案
问题分析与解决
你的问题出在自定义登录逻辑没有通过Laravel的认证系统完成用户认证——你只是手动把用户ID存入session,但Laravel的Auth::user()是从认证系统维护的用户实例中获取数据,而非直接读取你自定义的session键。
修复步骤
- 替换自定义session存储为Laravel认证方法
删掉手动存session的代码,改用Laravel官方提供的认证方法完成登录:public function check(LoginRequest $request) { $userInfo = User::where('email', '=', $request->email)->first(); if(!$userInfo){ return back()->with('message', 'We do not recognize your email address'); } if(Hash::check($request->password, $userInfo->password)){ // 用Laravel的Auth登录方法替代手动存session Auth::login($userInfo); // 也可以用ID直接登录:Auth::loginUsingId($userInfo->id); dd(Auth::user()); // 现在就能正常获取用户实例了 // return redirect('home'); } else { return back()->with('message', 'Incorrect password'); } } - 确保用户模型符合认证要求
你的User模型需要继承Laravel的认证基类,确保实现了认证接口(继承基类会自动实现),示例:namespace App\Models; use Illuminate\Foundation\Auth\User as Authenticatable; class User extends Authenticatable { // 模型其他代码... }
原代码失效原因
Laravel的认证系统会维护专属的session数据(默认以login_web_*开头),并通过认证守卫管理用户状态。你手动存入的isUsersession键不在Auth系统的识别范围内,因此Auth::user()无法获取到用户数据。
内容的提问来源于stack exchange,提问作者Newbi
相关产品推荐
相关产品推荐

