Django中如何获取当前用户ID?JWT返回Token时如何附带用户ID?
解决JWT获取Token同时返回用户ID的问题
嘿,我刚好也碰到过这个需求!要让obtain_jwt_token接口返回Token的同时带上用户ID,只需要自定义JWT的响应逻辑就行,操作很简单,具体步骤如下:
步骤1:自定义JWT响应处理器
在你的views.py里添加一个自定义的响应处理函数,用来修改JWT接口的返回内容:
from rest_framework_jwt.settings import api_settings def jwt_response_payload_handler(token, user=None, request=None): # 除了用户ID,你还可以按需添加其他字段,比如用户名、邮箱等 return { 'token': token, 'user_id': user.id, 'username': user.username }
步骤2:配置Django使用自定义处理器
打开项目的settings.py,添加JWT_AUTH配置,指定我们刚才写的处理器路径:
JWT_AUTH = { # 注意替换成你实际的视图路径,比如你的views在scrumboard app下,就写'scrumboard.views.jwt_response_payload_handler' 'JWT_RESPONSE_PAYLOAD_HANDLER': 'your_project_name.views.jwt_response_payload_handler', }
步骤3:验证效果
保持你原来的URL配置不变:
urlpatterns = [ url(r'^api-token-auth/', obtain_jwt_token), url(r'^users/$', views.UserList.as_view()), ]
现在调用/api-token-auth/接口,返回的响应就会包含Token和用户ID啦,示例响应如下:
{ "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX2lkIjoxLCJ1c2VybmFtZSI6ImpvaG5kb2UiLCJleHAiOjE3MTk5MjQwNzEsImVtYWlsIjoiam9obmRvZUBleGFtcGxlLmNvbSJ9.S9X0Xz8K8eQZ8aZ7aQ7aQ7aQ7aQ7aQ7aQ7aQ7aQ7aQ", "user_id": 1, "username": "john_doe" }
内容的提问来源于stack exchange,提问作者M1rwen
相关产品推荐
相关产品推荐

