У меня была новая установка Lumen 5.4, и я следовал этому учебнику . Вход и другие работают нормально, но выход из системы, кажется, не работает должным образом. Я имею в виду, что, если я пытаюсь истечь токен, он не выдаст мне ошибку, но если тот же токен (тот, который только что истек) был повторно использован, он должен сказать, что истек, но все еще проходит и получает меня данные. Проще говоря, я считаю, что токен вообще не истекает. Ниже мой код:

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' => [
    //
],

Любая помощь будет оценена.

1
JackSlayer94 22 Мар 2017 в 13:15

2 ответа

Лучший ответ

Теперь у меня все получилось, и я оставляю все позади, так что если кто-то еще столкнется с той же проблемой. Исправление должно было использовать CACHE_DRIVER=file в файле .env. Я не совсем уверен, почему или как это исправить, но некоторые исследования привели меня к этому и стали результатом проб и ошибок.

3
JackSlayer94 23 Мар 2017 в 11:57

Я считаю, что что-то может вызвать эту проблему. см. 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);
}

Мой драйвер кеша перерисовывается, и когда я аннулирую токен, эта функция будет вызвана。

Очевидно, $this->laravelVersion является нулем в люмене.

Я только что решил свою проблему

Скопировать Tymon\JWTAuth\Providers\Storage\Illuminate в другую папку

В моем случае я копирую в приложение \ 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,

Надеюсь, это поможет

0
zhengzp 8 Май 2020 в 09:32