4

我正在为一个项目使用 React 和 Django 休息框架。我使用 Django rest framework simple JWT 进行身份验证。现在,我想在用户登录后在导航栏中显示用户名。那么,在简单的 JWT 中有没有一种方法可以从身份验证后生成的访问令牌中返回用户详细信息,就像 Djoser 在提供访问令牌时返回用户凭据一样?

抱歉,如果这个问题很愚蠢,但我无法在任何地方找到解决方案。

4

2 回答 2

3

如果您想获取代币所有者的信息,您可以在 REQUEST 中查询。

class ViewProtect(APIView):
    permission_classes = [permissions.IsAuthenticatedOrReadOnly]

    def post(self, request, format=None):
        token_user_email = request.user.email
        token_user_username = request.user.username
        pass
于 2020-08-05T02:31:12.707 回答
0

关于后端,基本上我用这个库

from restframework_simplejwt.tokens import AccessToken

函数 AccessToken() 将字符串 access_token_str 作为输入并返回对象 access_token_obj。

要获取 user_id,可以使用指令

user_id=access_token_obj['user_id'].

在以下示例中,我创建了函数

get_user_from_access_token_in_django_rest_framework_simplejwt().

这个函数只是 AccessToken() 的一个包装器

完整代码:

#Path current file
#/blabla/django/project004/core/view.py


from restframework_simplejwt.tokens import AccessToken
from django.contrib.auth.models import User

access_token_str = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX3BrIjoxLCJ0b2tlbl90eXBlIjoiYWNjZXNzIiwiY29sZF9zdHVmZiI6IuKYgyIsImV4cCI6MTIzNDU2LCJqdGkiOiJmZDJmOWQ1ZTFhN2M0MmU4OTQ5MzVlMzYyYmNhOGJjYSJ9.NHlztMGER7UADHZJlxNG0WSi22a2KaYSfd1S-AuT7lU'
def get_user_from_access_token_in_django_rest_framework_simplejwt(access_token_str):
    access_token_obj = AccessToken(access_token_str)
    user_id=access_token_obj['user_id']
    user=User.objects.get(id=user_id)
    print('user_id: ', user_id )
    print('user: ', user)
    print('user.id: ', user.id )
    content =  {'user_id': user_id, 'user':user, 'user.id':user.id}
    return Response(content)

学分:

@davesque;
https://github.com/jazzband/djangorestframework-simplejwt/issues/140
于 2021-10-22T19:10:16.627 回答