jwt refresh 不会更新自定义声明

Posted

技术标签:

【中文标题】jwt refresh 不会更新自定义声明【英文标题】:jwt refresh doesn't update custom claims 【发布时间】:2019-06-09 14:42:54 【问题描述】:

这个问题已经被问过很多次了,但找不到合适的解决方案。

我这样做 - $newToken = auth()->refresh();

在我的自定义声明中,我有

 public function getJWTCustomClaims()
    
        return [
            'is_verified' => $this->verified,
            'email' => $this->email,
            'role' => $this->getMainRole()->name
        ];
    

场景 - 首先,当我登录时,它会返回 jwt 令牌。在那个 jwt 令牌中,我有 is_verified 、电子邮件、角色集。假设在我获得令牌时 is_verified 为 0。现在,我在数据库中将其更改为 1。现在,当我刷新令牌时,正如我在上面向您展示的那样,返回的 jwt 令牌仍然具有 is_verified 等于 0,但它应该有 1。知道如何修复它吗?

【问题讨论】:

我不太清楚,但这听起来像是缓存问题。可能令牌被缓存了,当您直接修改数据库时,当然不会清除缓存。 可以建议在 GitHub 上打开一个问题。你实际使用的是什么包? 你有解决这个问题的办法吗? 【参考方案1】:

试试$newToken = auth()->refresh(false, true);

第二个参数是“reset claim”:

JWTGuard 类 - public function refresh($forceForever = false, $resetClaims = false)

【讨论】:

以上是关于jwt refresh 不会更新自定义声明的主要内容,如果未能解决你的问题,请参考以下文章

Spring JWT - 添加自定义声明

ASP.NET Core 2.1 Jwt 设置自定义声明

向 ID 令牌 OpenID 添加自定义声明

如何使用 JJWT 从有效负载中获取自定义字段

JWT 如何添加自定义声明和解码声明

如何生成包含一些自定义声明的 JWT 访问令牌?