tymondesigns/jwt-auth: как создать токен с истекшим сроком действия?

Я использую версию 1 https://github.com/tymondesigns/jwt-auth.

Мне нужно создать токен с истекшим сроком действия, чтобы проверить TokenExpiredException в моем коде:

public function handle($request, Closure $next)
    {
        try {
            JWTAuth::parseToken()->authenticate();
        } catch (Exception $e) {
            if ($e instanceof TokenInvalidException) {
                return response()->json(['status' => 'Token is Invalid'], 401);
            } elseif ($e instanceof TokenExpiredException) {
                return response()->json(['status' => 'Token is Expired'], 401);
            } else {
                return response()->json(['status' => 'Authorization Token not found'], 401);
            }
        }
        return $next($request);
    }

Я не могу это сделать:

public function setUp(): void
    {
        parent::setUp();
        $password = '123456';
        $user = new User([
            'email' => '[email protected]',
            'password' => Hash::make($password),
        ]);
        $user->save();
    }

public function testExpiredToken()
{
    $user = User::first();
    $token = JWTAuth::fromUser($user, ['exp'=> 123456]);

   $response = $this->withHeaders([
            'Authorization' => 'Bearer '.$token,
        ])->get(Route('test_data_read_closed'));
        $response->assertStatus(401);
}

Но я получаю 200 из своего теста (токен принят, я получил ответ от своего маршрута), а не 401.

Как я могу создать токен с истекшим сроком действия? Спасибо


person sineverba    schedule 24.11.2019    source источник


Ответы (1)


Я часами пытался понять, почему он все еще отвечает кодом успеха 200, когда отправляется JWT с истекшим сроком действия (в целях тестирования). Оказывается, пакет JWT кэширует утверждения в экземпляре \Tymon\JWTAuth\Factory. Чтобы исправить это, вам просто нужно очистить претензии после создания JWT и до его отправки контроллеру:

\Tymon\JWTAuth\Facades\JWTAuth::getPayloadFactory()->emptyClaims();

В противном случае он считает, что это тот же запрос, и повторно использует уже созданные экземпляры \Tymon\JWTAuth\Claims\Claim для декодирования другого JWT. Я посмотрю о создании задачи на GitHub.

person ub3rst4r    schedule 21.07.2021