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

Laravel数据库会话user_id字段注册后为空问题求助

解决Laravel数据库会话user_id字段为空的问题

你当前的做法是把用户ID存入session的自定义数据中,但这并不会自动填充sessions表的user_id字段——这个字段是Laravel认证系统用来关联已登录用户的专属字段,需要通过官方的认证方法来触发更新。

正确实现步骤:

  1. 使用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);
      }
    
    } 
    
  2. 确保自定义用户模型符合认证要求
    如果你的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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 17:20:18