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);
});
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());
}
请求出正常的数据
步骤五:现在过了一分钟,继续请求个人信息接口
已经报错
{
“message”: “Unauthenticated.”
}
步骤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.”
}
所以现在的问题来了,按理说30分钟内可以获取一个新的token的呀,为什么就是获取不到?
@beatles 我重新编辑了下问题,可以帮我看下么
你理解错了,自带的
refresh
中间件,是每次请求在响应的header
头中都会增加authorization
字段,你上面的代码,本来token就过期了,你还放在验证中,肯定是未认证啊(如图:),使用方法可以看下面的链接: 博客:使用 Jwt-Auth 实现 API 用户认证以及无痛刷新访问令牌除了login 其他的都使用 auth:api吧?
@hiword