【问题标题】:JWT Auth token not invalidating after logout in Lumen 5.4在 Lumen 5.4 中注销后 JWT Auth 令牌不会失效
【发布时间】:2017-08-14 09:19:25
【问题描述】:

我有一个全新的 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' => [
    //
],

任何帮助将不胜感激。

【问题讨论】:

    标签: php jwt lumen


    【解决方案1】:

    我发现某些东西可能会导致这个问题。 请参阅 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,
    

    希望对你有帮助

    【讨论】:

    • 这如何解决 OP 的问题?您应该在答案中添加解决方案而不是解释。
    【解决方案2】:

    我现在已经让它工作并留下了步骤,所以如果其他人面临同样的问题。解决方法是在.env 文件中使用CACHE_DRIVER=file。我不完全确定为什么或如何解决它,但一些研究使我发现了这一点,并且是反复试验的结果。

    【讨论】:

    • 糟糕,我的缓存驱动是redis。永远不会退出。
    猜你喜欢
    • 2018-03-30
    • 1970-01-01
    • 1970-01-01
    • 2019-02-14
    • 2019-09-24
    • 2016-10-20
    • 2020-02-20
    • 2018-10-21
    • 2021-11-25
    相关资源
    最近更新 更多