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

Laravel Vue JWT API认证调用api/auth/user时遇token_not_provided错误

嘿,我之前在搭Laravel+Vue的JWT认证时也踩过这个一模一样的坑,给你梳理几个关键排查点,应该能解决你的问题:

排查步骤:

1. 先确认登录接口真的返回了JWT Token

很多时候看起来登录成功,但其实接口根本没生成token。打开你的登录控制器(比如app/Http/Controllers/Auth/LoginController.php),检查核心逻辑是不是像下面这样:

public function login(Request $request)
{
    $credentials = $request->validate([
        'email' => 'required|email',
        'password' => 'required'
    ]);

    // 验证用户凭证并生成token(指定api guard)
    if (! $token = auth('api')->attempt($credentials)) {
        return response()->json(['error' => 'Unauthorized'], 401);
    }

    // 返回包含token的标准响应
    return response()->json([
        'access_token' => $token,
        'token_type' => 'Bearer',
        'expires_in' => auth('api')->factory()->getTTL() * 60
    ]);
}

重点要确认:

  • 明确使用auth('api')->attempt()而非默认的web guard
  • 验证成功后确实返回了access_token字段

2. 检查请求用户接口时是否正确携带Token

JWT默认要求通过Authorization请求头携带Token,格式是Bearer 你的token字符串。

  • 如果是前端Vue项目,要确保请求拦截器正确添加了这个头,比如用axios的话:
// 在axios配置中添加请求拦截器
axios.interceptors.request.use(config => {
    const token = localStorage.getItem('auth_token');
    if (token) {
        config.headers.Authorization = `Bearer ${token}`;
    }
    return config;
});
  • 如果用Postman测试,直接在Headers标签里添加键Authorization,值填Bearer 你的token内容

3. 验证Laravel的Auth配置是否正确

打开config/auth.php,确保api guard的driver设置为jwt:

'guards' => [
    'web' => [
        'driver' => 'session',
        'provider' => 'users',
    ],

    'api' => [
        'driver' => 'jwt', // 这里必须是jwt,不能是session
        'provider' => 'users',
    ],
],

同时确认你的/api/auth/user路由使用了auth:api中间件:

// routes/api.php
Route::middleware('auth:api')->get('/auth/user', function (Request $request) {
    return $request->user();
});

4. 排查是否有中间件干扰Token传递

有时候全局中间件会影响请求头,比如EncryptCookies或者VerifyCsrfToken,但api路由默认是不包含这些中间件的。检查app/Http/Kernel.php的$middlewareGroups里的api组:

protected $middlewareGroups = [
    'web' => [
        // web路由的中间件,包含session、csrf等
    ],
    'api' => [
        'throttle:api',
        \Illuminate\Routing\Middleware\SubstituteBindings::class,
    ],
];

确保api组里没有添加多余的中间件(比如session相关的),因为JWT是无状态认证,不需要依赖session。

5. 确认用户密码是正确哈希存储的

如果用户创建时密码没有用Hash::make()加密,auth()->attempt()会验证失败,导致生成不了token。比如注册控制器里的逻辑:

public function register(Request $request)
{
    $user = User::create([
        'name' => $request->name,
        'email' => $request->email,
        'password' => Hash::make($request->password), // 必须用Hash加密密码
    ]);

    // ...其他注册逻辑
}

按照上面的步骤逐一排查,应该能快速定位到问题所在。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:51:10