首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >tymondesigns/jwt-auth:如何创建过期令牌?

tymondesigns/jwt-auth:如何创建过期令牌?
EN

Stack Overflow用户
提问于 2019-11-24 23:38:42
回答 1查看 234关注 0票数 4

我使用的是https://github.com/tymondesigns/jwt-auth的V1

我需要创建一个过期令牌,以便在我的代码中测试TokenExpiredException

代码语言:javascript
复制
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);
    }

我做不到:

代码语言:javascript
复制
public function setUp(): void
    {
        parent::setUp();
        $password = '123456';
        $user = new User([
            'email' => 'info@example.com',
            '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分。

如何创建过期令牌?谢谢

EN

回答 1

Stack Overflow用户

发布于 2021-07-21 15:56:13

我花了几个小时试图弄清楚,当发送过期的JWT时(出于测试目的),它为什么仍然响应200成功代码。事实证明,JWT包将声明缓存在\Tymon\JWTAuth\Factory实例中。要修复它,您只需在生成JWT之后并将其发送到控制器之前清除声明:

代码语言:javascript
复制
\Tymon\JWTAuth\Facades\JWTAuth::getPayloadFactory()->emptyClaims();

否则,它会认为这是相同的请求,并将重用已构建的\Tymon\JWTAuth\Claims\Claim实例来解码另一个JWT。我会考虑在GitHub上创建一个问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59019367

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档