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

Laravel 5.5用jwt-auth实现API注册登录遇Token Not Provided错误求助

解决Laravel 5.5 + jwt-auth的「Token Not Provided」错误

我来帮你排查这个头疼的问题,结合你的代码和Laravel 5.5搭配jwt-auth的常见坑,咱们一步步定位解决:

1. 先确认后续请求的Token传递方式是否正确

这是最常见的触发原因!jwt-auth默认要求Token必须放在Authorization请求头里,格式严格为:

Bearer {你的token字符串}

很多人容易踩的坑:

  • 直接把token字符串塞进Authorization头,漏掉了Bearer 前缀
  • 把token放在请求体(比如单独的token字段)或者URL参数里,而非指定的请求头
  • 前端跨域请求时,没配置允许传递自定义Authorization头

你可以用Postman快速测试:在请求头里添加Authorization,值填Bearer 你登录返回的token,再访问需要验证的接口,看是否还报错。

2. 检查JWT的Guard和中间件配置

验证config/auth.php的API Guard配置

确保api guard的驱动是jwt,而非默认的token:

'guards' => [
    'web' => [
        'driver' => 'session',
        'provider' => 'users',
    ],
    'api' => [
        'driver' => 'jwt', // 必须设置为jwt
        'provider' => 'users',
    ],
],

确认路由是否正确应用了auth:api中间件

需要身份验证的API路由,必须包裹在auth:api中间件组内,比如:

Route::group(['middleware' => 'auth:api'], function () {
    // 这里放需要验证的接口,比如用户信息、订单查询等
    Route::get('/user/profile', 'UserController@profile');
});

如果没加这个中间件,或者误加为auth(默认对应web guard),会导致Token验证逻辑失效。

3. 检查登录代码的Credentials字段问题

看你的登录代码:

$credentials = $request->only('username', 'password');

但注册时你用的是email作为用户标识,你的User模型默认认证字段应该是email吧?如果数据库里没有username字段,这里得改成email才能生成有效Token:

$credentials = $request->only('email', 'password');

虽然这个问题不会直接触发「Token Not Provided」,但如果登录生成的Token无效,后续请求也会出现类似验证错误。

4. 确认jwt-auth的核心配置

检查config/jwt.php里的关键配置项:

'token_header' => 'Authorization', // 必须是Authorization
'token_prefix' => 'Bearer', // 必须是Bearer,注意后缀有空格

如果这些配置被修改过,jwt-auth就无法识别你传递的Token。

额外提醒:注册时密码要哈希

看你的注册代码里$this->user->registerUser(),一定要确保注册时密码是用Hash::make()哈希过的——因为JWTAuth::attempt()需要匹配哈希后的密码才能生成Token,否则登录会返回「Invalid credentials!」。

按照上面的步骤排查,应该就能解决「Token Not Provided」的问题了!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:52:19