获取使用 JWT 返回的用户 ID

Posted

技术标签:

【中文标题】获取使用 JWT 返回的用户 ID【英文标题】:Getting user id returned with JWT 【发布时间】:2019-07-01 17:02:39 【问题描述】:

早上好,

我正在编写我的第一个 DRF API 并使用 django-rest-framework-jwt (https://getblimp.github.io/django-rest-framework-jwt/) 来处理 JWT 身份验证。

我目前正在使用内置视图:

from rest_framework_jwt.views import obtain_jwt_token
from rest_framework_jwt.views import refresh_jwt_token

 urlpatterns = [
    path('auth/obtain_token/', obtain_jwt_token),
    path('auth/refresh_token/', refresh_jwt_token),

但需要将一些用户信息返回给 UI(VueJS)。我想将用户 ID 和名称信息存储到 Vuex 存储中,以传递给后续 API 调用并呈现给用户(“Hello Jim!”)。

我发现这个讨论为 jwt 有效负载响应添加自定义函数: jwt rest framework returning user id with token

虽然我不知道在哪里做这个......

感谢您帮助澄清。

BCBB

【问题讨论】:

【参考方案1】:

有几个解决方案

1) 首先用户id在JWT中编码,你可以在你的js中自己解码。

2) 您可以覆盖从 django-rest-framework-jwt 返回的有效负载,如下所示: 例如,将以下代码放入您的 accounts 应用程序中的一个名为 utils.py 的文件中

def jwt_response_payload_handler(token, user=None, request=None):
    return 
        'token': token,
        'username': user.username,
        'user_id' : user.id,
        'email' : user.email
    

并在rest-framework-jwt 设置中替换

    'JWT_RESPONSE_PAYLOAD_HANDLER':
    'rest_framework_jwt.utils.jwt_response_payload_handler',

有了这个

    'JWT_RESPONSE_PAYLOAD_HANDLER':
    'accounts.utils.jwt_response_payload_handler',

【讨论】:

太棒了!谢谢你的帮助。我会试一试。 你太棒了。像魅力一样工作! 对于未来的人们:绝妙的解决方案。为了澄清,我的设置声明在JWT_AUTH

以上是关于获取使用 JWT 返回的用户 ID的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 jwt 令牌获取用户 ID

使用 Django Rest Framework Simple JWT TokenRefresh 返回用户名和 ID

Asp.Net Core 2.2 - 如何在使用两个 AuthorizationSchemes、JWT 和 cookie 时返回当前用户 ID

通过 Open Id 进行身份验证后返回 JWT

Spring with JWT auth,获取当前用户

SpringCloud Alibaba微服务实战二十一 - JWT增强