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

Laravel注册后跳转dashboard用户未认证auth()->user()返回null

问题根因

核心错误出在用户创建逻辑的密码哈希环节:你在调用Hash::make()时传入的参数是$request->email,将邮箱值做哈希后存入了数据库的password字段。后续执行auth()->attempt()时,传入的是用户提交的明文密码,框架会将该明文密码做哈希后和数据库存储的哈希值做比对,二者完全不匹配,认证判定失败,不会写入登录Session,因此重定向到dashboard后auth()->user()返回null。

修复方案
  • 修正用户创建时的密码哈希传参,将Hash::make()的入参从邮箱改为用户提交的密码字段,修正后的用户创建代码如下:
User::create([
    'name' => $request->name,
    'username' => $request->username,
    'email' => $request->email,
    'password' => Hash::make($request->password), // 原代码错误传入$request->email
]);
  • 给认证逻辑增加失败拦截,避免认证失败仍然强制跳转,方便后续排查问题:
// 替换原有的auth()->attempt(...)行
$authResult = auth()->attempt($request->only('email', 'password'));
if (!$authResult) {
    return back()->withErrors(['认证失败,请重试']);
}
  • 可选优化:注册场景属于可信用户创建流程,可以直接在创建用户后调用login()方法实现自动登录,省去一次数据库密码校验,逻辑更简洁:
$user = User::create([
    'name' => $request->name,
    'username' => $request->username,
    'email' => $request->email,
    'password' => Hash::make($request->password),
]);
auth()->login($user); // 直接登录刚创建的用户,无需走attempt校验
常规排查项(非当前场景必现问题,可用于后续同类问题定位)
  • 确认注册、dashboard路由都挂载在web中间件组下,且app/Http/Kernel.php的web中间件组中已加入\Illuminate\Session\Middleware\StartSession::class,缺少Session中间件会导致登录态无法跨请求持久化。
  • 确认User模型的$fillable批量赋值白名单中包含password字段,避免密码字段被批量赋值拦截无法写入数据库。
  • 确认config/auth.php中配置的默认用户守卫和当前使用的守卫一致,避免调用auth()时使用了错误的守卫实例。

内容的提问来源于stack exchange,提问作者combat

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 21:45:41