Laravel会话表自定义USER_ID字段:登录后user_id为空的解决方法
解决Laravel数据库Session中user_id为空的问题
1. 正确配置User模型的主键
Laravel默认用id作为用户模型的主键,你的自定义表主键是USUARIOS_ID,必须在User模型里显式声明:
打开app/Models/User.php,添加或修改以下属性:
// 指定自定义主键名 protected $primaryKey = 'USUARIOS_ID'; // 如果USUARIOS_ID不是自增整数类型(比如字符串UUID),需添加此行 // public $incrementing = false; // 若主键类型不是int,还要指定类型(可选) // protected $keyType = 'string';
2. 检查Session表的user_id字段类型
确保session表的user_id字段类型和USUARIOS_ID完全匹配:
- 若
USUARIOS_ID是int(11),session表的user_id也应为int(11)(允许NULL) - 若为字符串类型(如
varchar(255)),user_id字段也要对应设置相同类型
3. 使用Laravel官方认证方法登录
必须用Laravel自带的认证逻辑登录,才能自动把用户ID写入Session的user_id字段:
- 用
Auth::attempt($credentials)验证并登录用户 - 或用
Auth::login($user)直接登录已获取的用户实例
避免手动操作Session存储用户信息,这种方式不会自动填充user_id字段。
4. 清除配置缓存
修改模型配置后,需要清除缓存确保生效:
php artisan config:clear php artisan cache:clear
5. 验证用户认证标识符
登录后可以打印Auth::user()->getAuthIdentifier(),确认返回的是USUARIOS_ID的正确值——这就是Laravel存入Session user_id字段的内容。
内容的提问来源于stack exchange,提问作者Ricardo Afonso
相关产品推荐
相关产品推荐

