Laravel认证成功后Auth::user()为空,读取pUserId属性报错如何解决?
问题根因
- 路由未加认证保护:
/home路由没有配置auth中间件,未登录用户或会话过期时访问该地址,Auth::user()会直接返回null - User模型主键配置错误:Laravel默认Eloquent模型主键为自增整型的
id字段,你将User模型绑定到profiles表后,没有显式指定自定义主键的配置,导致认证成功后会话无法正确存储用户标识,后续请求无法从数据库匹配到登录用户,最终返回null
解决方案
第一步:给Home路由加认证中间件
修改路由配置,只有登录用户可访问Home页,避免未登录场景下触发空对象错误:
Route::get('/home', 'HomeController@index')->middleware('auth');
第二步:补全User模型的主键配置
在App\Models\User类中添加自定义主键相关配置:
class User extends Authenticatable { use HasApiTokens, HasFactory, Notifiable; protected $table = 'profiles'; protected $guarded = []; // 新增以下3行配置 protected $primaryKey = 'pUserId'; // 指定表主键字段名 public $incrementing = false; // 关闭主键自增属性 protected $keyType = 'string'; // 声明主键类型为字符串 }
可选优化
你控制器中不需要重复查询profiles表,Auth::user()本身就是绑定了profiles表的模型实例,所有字段可以直接调用:
function index(){ $profiles = Auth::user(); return view('home', compact('profiles')); }
内容的提问来源于stack exchange,提问作者daniel leander
相关产品推荐
相关产品推荐

