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

Laravel 9中忘记密码路由在Sanctum认证内失效问题求助

Laravel忘记密码路由无法在Sanctum中间件内工作的解决方法
  • 核心原因:auth:sanctum中间件用于验证已登录的API用户,而忘记密码功能面向未登录用户,请求时没有有效Sanctum令牌,会被中间件拦截返回401未授权。

  • 解决步骤:

    1. 调整路由位置:将忘记密码相关路由(发送重置链接、重置密码)移出auth:sanctum路由组,放在无需认证的区域。示例代码:
      // 错误写法(在认证组内)
      Route::middleware('auth:sanctum')->group(function () {
          Route::post('/forgot-password', [PasswordResetController::class, 'sendResetLinkEmail']);
      });
      
      // 正确写法1:放在认证组外
      Route::post('/forgot-password', [PasswordResetController::class, 'sendResetLinkEmail']);
      
      // 正确写法2:在组内单独排除中间件
      Route::middleware('auth:sanctum')->group(function () {
          // 其他需要认证的路由...
      });
      
      Route::post('/forgot-password', [PasswordResetController::class, 'sendResetLinkEmail'])
          ->withoutMiddleware(['auth:sanctum']);
      
    2. 检查控制器逻辑:确保忘记密码的控制器方法没有额外认证逻辑,比如不要调用auth()->user()(此时用户未登录,会返回null)。Laravel自带的密码重置控制器已适配未认证场景。
    3. 验证路由中间件:执行php artisan route:list命令,查看该路由实际应用的中间件,确认auth:sanctum未被加载。

内容的提问来源于stack exchange,提问作者JB-Work

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 12:00:51