You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel认证成功后Auth::user()为空,读取pUserId属性报错如何解决?

问题根因

  1. 路由未加认证保护:/home路由没有配置auth中间件,未登录用户或会话过期时访问该地址,Auth::user()会直接返回null
  2. 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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 08:45:02