Laravel数据库会话user_id字段注册后为空问题求助
解决Laravel数据库会话
user_id字段为空的问题 你当前的做法是把用户ID存入session的自定义数据中,但这并不会自动填充sessions表的user_id字段——这个字段是Laravel认证系统用来关联已登录用户的专属字段,需要通过官方的认证方法来触发更新。
正确实现步骤:
使用Laravel认证系统完成用户登录
替换你代码中手动设置session的行,调用Laravel的认证方法,系统会自动将用户ID写入sessions.user_id字段:// 先引入Auth门面(如果控制器顶部没加的话) use Illuminate\Support\Facades\Auth; class RootController { public function registration(Request $request) { $request->validate([ 'prenom' => ['required',....], 'nom' => ['required',....], 'mail' => ['required',....], 'password' => ['required',....] ]) ; /* 创建用户账户 */ $user= Client::create([ 'prenom' => $request->prenom, 'nom' => $request->nom, 'mail' => $request->mail, 'password' => Hash::make($request->password) ]); // 替换手动设置session的代码,用认证方法登录用户 Auth::login($user); return Redirect::to("logged_in/". $user->id); } }确保自定义用户模型符合认证要求
如果你的Client模型不是默认的User模型,需要确保它实现了Laravel的认证接口:use Illuminate\Foundation\Auth\User as Authenticatable; class Client extends Authenticatable { // 模型其他代码... }
为什么原来的方法无效?
session(['user_id' => $user->id])只是将数据存入session的payload(即sessions表的payload字段中),并不会直接更新表的user_id列。这个列是Laravel内部用来追踪已认证用户的,只有通过Auth::login()等官方认证方法,系统才会自动填充该字段。
内容的提问来源于stack exchange,提问作者GAOUSSOU DIARRA
相关产品推荐
相关产品推荐

