在 Lumen 5.4 中注销后 JWT Auth 令牌不会失效
JWT Auth token not invalidating after logout in Lumen 5.4
我安装了全新的 Lumen 5.4 并遵循了这个 tutorial。登录和其他工作正常,但注销似乎无法正常工作。我的意思是,如果我尝试使令牌过期,它不会给我一个错误,但如果重复使用相同的令牌(刚刚过期的令牌),它应该说已过期但仍然通过并让我数据。简单来说,我相信它根本不会使令牌过期。下面是我的代码:
UserController
代码:
class UserController extends Controller
{
protected $jwt;
public function __construct(JWTAuth $jwt)
{
$this->jwt = $jwt;
}
public function Signin(Request $request)
{
$this->validate($request, [
'email' => 'required|email|max:100',
'password' => 'required|min:6',
]);
if (!$token = $this->jwt->attempt($request->only('email', 'password'))) {
return response()->json(['The credentials provided are invalid.'], 500);
}
return response()->json(compact('token'));
}
public function LogoutUser(Request $request){
$this->jwt->invalidate($this->jwt->getToken());
return response()->json([
'message' => 'User logged off successfully!'
], 200);
}
}
routes
:
$app->group(['prefix' => 'api'], function($app){
$app->post('/signup', [
'uses' => 'UserController@Signup'
]);
$app->group(['middleware' => 'auth:api'], function($app){
$app->post('/logout',[
'uses' => 'UserController@LogoutUser'
]);
});
});
config/auth.php
:
'defaults' => [
'guard' => env('AUTH_GUARD', 'api'),
],
'guards' => [
'api' => [
'driver' => 'jwt',
'provider' => 'users'
],
],
'providers' => [
'users' => [
'driver' => 'eloquent',
'model' => \App\User::class,
],
],
'passwords' => [
//
],
任何帮助将不胜感激。
我现在已经开始工作并留下了步骤,所以如果其他人遇到同样的问题。解决方法是在 .env
文件中使用 CACHE_DRIVER=file
。我不确定为什么或如何修复它,但一些研究让我想到了这一点,这是反复试验的结果。
我发现有些东西可能会导致这个问题。
见 Tymon\JWTAuth\Providers\Storage\Illuminate
public function add($key, $value, $minutes)
{
// If the laravel version is 5.8 or higher then convert minutes to seconds.
if ($this->laravelVersion !== null
&& is_int($minutes)
&& version_compare($this->laravelVersion, '5.8', '>=')
) {
$minutes = $minutes * 60;
}
$this->cache()->put($key, $value, $minutes);
}
我的缓存驱动是redis,当我使token失效时,这个函数会被调用。
显然$this->laravelVersion
在流明中为空。
我刚刚解决了我的问题
复制Tymon\JWTAuth\Providers\Storage\Illuminate
到其他文件夹
就我而言,我复制到 app\Providers\Storage\Illuminate
修改add
函数
public function add($key, $value, $minutes)
{
$seconds = $minutes * 60;
$this->cache()->put($key, $value, $seconds);
}
记得更改命名空间。
然后修改config/jwt
#'storage' => Tymon\JWTAuth\Providers\Storage\Illuminate::class,
'storage' => App\Providers\Storage\Illuminate::class,
希望对您有所帮助
我安装了全新的 Lumen 5.4 并遵循了这个 tutorial。登录和其他工作正常,但注销似乎无法正常工作。我的意思是,如果我尝试使令牌过期,它不会给我一个错误,但如果重复使用相同的令牌(刚刚过期的令牌),它应该说已过期但仍然通过并让我数据。简单来说,我相信它根本不会使令牌过期。下面是我的代码:
UserController
代码:
class UserController extends Controller
{
protected $jwt;
public function __construct(JWTAuth $jwt)
{
$this->jwt = $jwt;
}
public function Signin(Request $request)
{
$this->validate($request, [
'email' => 'required|email|max:100',
'password' => 'required|min:6',
]);
if (!$token = $this->jwt->attempt($request->only('email', 'password'))) {
return response()->json(['The credentials provided are invalid.'], 500);
}
return response()->json(compact('token'));
}
public function LogoutUser(Request $request){
$this->jwt->invalidate($this->jwt->getToken());
return response()->json([
'message' => 'User logged off successfully!'
], 200);
}
}
routes
:
$app->group(['prefix' => 'api'], function($app){
$app->post('/signup', [
'uses' => 'UserController@Signup'
]);
$app->group(['middleware' => 'auth:api'], function($app){
$app->post('/logout',[
'uses' => 'UserController@LogoutUser'
]);
});
});
config/auth.php
:
'defaults' => [
'guard' => env('AUTH_GUARD', 'api'),
],
'guards' => [
'api' => [
'driver' => 'jwt',
'provider' => 'users'
],
],
'providers' => [
'users' => [
'driver' => 'eloquent',
'model' => \App\User::class,
],
],
'passwords' => [
//
],
任何帮助将不胜感激。
我现在已经开始工作并留下了步骤,所以如果其他人遇到同样的问题。解决方法是在 .env
文件中使用 CACHE_DRIVER=file
。我不确定为什么或如何修复它,但一些研究让我想到了这一点,这是反复试验的结果。
我发现有些东西可能会导致这个问题。 见 Tymon\JWTAuth\Providers\Storage\Illuminate
public function add($key, $value, $minutes)
{
// If the laravel version is 5.8 or higher then convert minutes to seconds.
if ($this->laravelVersion !== null
&& is_int($minutes)
&& version_compare($this->laravelVersion, '5.8', '>=')
) {
$minutes = $minutes * 60;
}
$this->cache()->put($key, $value, $minutes);
}
我的缓存驱动是redis,当我使token失效时,这个函数会被调用。
显然$this->laravelVersion
在流明中为空。
我刚刚解决了我的问题
复制Tymon\JWTAuth\Providers\Storage\Illuminate
到其他文件夹
就我而言,我复制到 app\Providers\Storage\Illuminate
修改add
函数
public function add($key, $value, $minutes)
{
$seconds = $minutes * 60;
$this->cache()->put($key, $value, $seconds);
}
记得更改命名空间。
然后修改config/jwt
#'storage' => Tymon\JWTAuth\Providers\Storage\Illuminate::class,
'storage' => App\Providers\Storage\Illuminate::class,
希望对您有所帮助