获取使用 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的主要内容,如果未能解决你的问题,请参考以下文章
使用 Django Rest Framework Simple JWT TokenRefresh 返回用户名和 ID
Asp.Net Core 2.2 - 如何在使用两个 AuthorizationSchemes、JWT 和 cookie 时返回当前用户 ID