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

Laravel Sanctum登录异常求助:输入正确信息仍返回401错误

Laravel Sanctum登录返回401(凭证正确)排查方案

以下是针对这个问题的具体排查步骤,按优先级排序:

1. 基础配置检查

  • 确认config/sanctum.php中stateful配置包含你的前端域名(前后端分离场景),示例:
    'stateful' => explode(',', env('SANCTUM_STATEFUL_DOMAINS', 'localhost,127.0.0.1:3000')),
    
  • 检查app/Http/Kernel.php的api中间件组,确保EnsureFrontendRequestsAreStateful::class已添加且在throttle中间件之前:
    'api' => [
        \Laravel\Sanctum\Http\Middleware\EnsureFrontendRequestsAreStateful::class,
        'throttle:api',
        \Illuminate\Routing\Middleware\SubstituteBindings::class,
    ],
    
  • 确认.env中SESSION_DRIVER设置为cookie(SPA认证模式必填),SESSION_DOMAIN配置正确(本地开发可设为.localhost)。

2. 登录接口实现校验

  • 排查登录接口是否错误添加了auth:sanctum中间件——登录接口本身不需要该中间件,否则未携带token时直接返回401。
  • 检查凭证验证逻辑是否正确,示例代码:
    public function login(Request $request)
    {
        $validated = $request->validate([
            'email' => 'required|email',
            'password' => 'required',
        ]);
    
        if (!Auth::attempt($validated)) {
            return response()->json(['message' => 'Unauthorized'], 401);
        }
    
        // 生成token(API token模式)
        $token = Auth::user()->createToken('auth-token')->plainTextToken;
        return response()->json(['access_token' => $token]);
    }
    
  • 确认使用的Guard正确:SPA模式默认用web Guard,API token模式用api Guard,可通过Auth::guard('api')->attempt(...)指定。

3. 用户模型与密码校验

  • 确认用户模型App\Models\User引入了HasApiTokens trait:
    use Laravel\Sanctum\HasApiTokens;
    
    class User extends Authenticatable
    {
        use HasApiTokens, HasFactory, Notifiable;
        // ...
    }
    
  • 验证用户密码是否为哈希存储:在项目根目录执行php artisan tinker,输入Hash::check('你的密码', User::find(1)->password),若返回false说明密码未正确哈希,需重新生成哈希密码存储。

4. 请求与跨域配置

  • 前端请求需携带Accept: application/json头,避免Laravel返回HTML重定向(导致看似401的错误响应)。
  • 跨域配置检查:config/cors.php中需确保:
    'paths' => ['api/*', 'sanctum/csrf-cookie'],
    'allowed_origins' => ['你的前端域名'],
    'supports_credentials' => true,
    
  • SPA模式下,前端需开启携带cookie(如Axios设置withCredentials: true),且请求前先调用GET /sanctum/csrf-cookie获取CSRF令牌。

内容的提问来源于stack exchange,提问作者Florian De Haro

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 11:12:49