JWT 刷新 token 报 Unauthenticated,困扰 2 天了,真的希望大家给看下!!!!

问题:现在测试开发小程序 JWT_TTL的时间设置为1,但是JWT_REFRESH_TTL设置时间为30,那么现在的Token已经2分钟了,去刷新比如 个人接口肯定是报错Unauthenticated的,但是还在JWT_REFRESH_TTL设置的30分钟以内。那么我去请求refresh接口换一个新的token出来,发现也是报Unauthenticated。下面是详细的代码,请求大家给看下

步骤一;重新生成jwt key (怕之前的有影响)

php artisan jwt:secret

步骤二:设置JWT的配置文件

设置时间1分钟的原因是为了更好的测试过期时间

'ttl' => env('JWT_TTL', 1),
'refresh_ttl' => env('JWT_REFRESH_TTL', 30),

步骤三:临时获取一个用户的token

路由文件中写入

    Route::post('gettoken', function (){
        $a = \App\Models\User::find(2);
        $b = auth('api')->login($a);
        dd($b);
    });

JWT刷新token报Unauthenticated,困扰2天了,真的希望大家给看下!!!!

eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwOlwvXC8xLmNvbVwvYXBpXC92MVwvZ2V0dG9rZW4iLCJpYXQiOjE1OTE5MjUxOTYsImV4cCI6MTU5MTkyNTI1NiwibmJmIjoxNTkxOTI1MTk2LCJqdGkiOiJpUFhYMWU3SU1QcEtReWN5Iiwic3ViIjoyLCJwcnYiOiIyM2JkNWM4OTQ5ZjYwMGFkYjM5ZTcwMWM0MDA4NzJkYjdhNTk3NmY3In0.pBNn-Dx6qVGwibn3ny-9ksm2hbQRjSSH57AgwYdlPyg获取到token eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwOlwvXC8xLmNvbVwvYXBpXC92MVwvZ2V0dG9rZW4iLCJpYXQiOjE1OTE5MjUxOTYsImV4cCI6MTU5MTkyNTI1NiwibmJmIjoxNTkxOTI1MTk2LCJqdGkiOiJpUFhYMWU3SU1QcEtReWN5Iiwic3ViIjoyLCJwcnYiOiIyM2JkNWM4OTQ5ZjYwMGFkYjM5ZTcwMWM0MDA4NzJkYjdhNTk3NmY3In0.pBNn-Dx6qVGwibn3ny-9ksm2hbQRjSSH57AgwYdlPyg

步骤四:请求一个个人信息

//路由文件
    Route::middleware('auth:api')->group(function (){
        Route::post('me', 'UsersController@me');
    });

//UsersController 文件中的代码 
public function me()
{
  return response()->json(auth('api')->user());
}

请求出正常的数据
JWT刷新token报Unauthenticated,困扰2天了,真的希望大家给看下!!!!

步骤五:现在过了一分钟,继续请求个人信息接口

已经报错

{
“message”: “Unauthenticated.”
}

JWT刷新token报Unauthenticated,困扰2天了,真的希望大家给看下!!!!

步骤6 现在请求一个刷新的接口,因为时间毕竟没过30分钟么,案例说应该给一个新的token

//路由文件
Route::middleware('auth:api')->group(function (){
  Route::post('me', 'UsersController@me');                  ////////////这个是上面请求的个人信息
  Route::post('refresh', 'UsersController@refresh');        ////////////这个是刷新token的
});

//UsersController文件中的写法
public function refresh()
{
  return auth('api')->refresh();
}

请求测试
然后还是报错

{
“message”: “Unauthenticated.”
}

JWT刷新token报Unauthenticated,困扰2天了,真的希望大家给看下!!!!

所以现在的问题来了,按理说30分钟内可以获取一个新的token的呀,为什么就是获取不到?

经过测试的话,在一分钟以内,请求刷新接口是可以获取到新的token的,我去问了好几个人都说token过期了,在JWT_REFRESH_TTL的时间内,也可以换取到一个新的token,我怎么换取不到呀,是不是配置文件什么的没弄好?

《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 4

@beatles 我重新编辑了下问题,可以帮我看下么

4年前 评论
beatles 4年前
liuhaiqiang999 (作者) (楼主) 4年前
liuhaiqiang999 (作者) (楼主) 4年前

你理解错了,自带的refresh中间件,是每次请求在响应的header头中都会增加authorization字段,你上面的代码,本来token就过期了,你还放在验证中,肯定是未认证啊(如图:),使用方法可以看下面的链接: 博客:使用 Jwt-Auth 实现 API 用户认证以及无痛刷新访问令牌

file

4年前 评论
liuhaiqiang999 (楼主) 4年前
liuhaiqiang999 (楼主) 4年前

file 仔细看,这个中间件和你写的中间件,是不是一样的

4年前 评论

file

    public function __construct()
    {
        $this->middleware('auth:api', ['except' => ['login']]);
    }

除了login 其他的都使用 auth:api吧?
@hiword

4年前 评论
liuhaiqiang999 (作者) (楼主) 4年前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!