python - Django Rest API Djoser 刷新和访问 token 问题

标签 python django django-rest-framework jwt

当用户使用/auth/users/端点注册时,我试图获取访问和刷新 token 。

我已经扩展了序列化程序,它显示了所有自定义字段。注册用户成功,返回结果如下:

{
    "mobile": "12345",
    "driving_id": "478161839",
    "full_name": "John Doe",

} 

这是我想要访问和刷新 token 的地方。我读到 djoser 使用 django simple jwt 库来提供访问和刷新 token 。这是我能够手动创建 token 的功能,但我唯一不明白的是在哪里返回带有其他详细信息的数据。
from rest_framework_simplejwt.tokens import RefreshToken

def get_tokens_for_user(user):
    refresh = RefreshToken.for_user(user)

    return {
        'refresh': str(refresh),
        'access': str(refresh.access_token),
    }

最佳答案

我解决了它,但我不知道这是否是最好的方法。我从 djoser.views 导入了用户 View 集,然后覆盖了 create 方法。我获取用户,然后为它创建 JWT token ,将它添加到响应字典并返回它。

from rest_framework import status
from djoser.views import UserViewSet
from djoser import signals
from djoser.compat import get_user_email

from rest_framework_simplejwt.tokens import RefreshToken


class CustomRegistrationView(UserViewSet):

    def perform_create(self, serializer):
        user = serializer.save()
        signals.user_registered.send(
            sender=self.__class__, user=user, request=self.request
        )

        context = {"user": user}
        to = [get_user_email(user)]
        if settings.SEND_ACTIVATION_EMAIL:
            settings.EMAIL.activation(self.request, context).send(to)
        elif settings.SEND_CONFIRMATION_EMAIL:
            settings.EMAIL.confirmation(self.request, context).send(to)


    def create(self, request, *args, **kwargs):
        serializer = self.get_serializer(data=request.data)
        serializer.is_valid(raise_exception=True)
        self.perform_create(serializer)
        headers = self.get_success_headers(serializer.data)
        response_data = serializer.data

        user = User.objects.get(username = response_data['username'])
        refresh = RefreshToken.for_user(user)
        response_data['refresh'] = str(refresh)
        response_data['access'] = str(refresh.access_token)

        return Response(response_data, status=status.HTTP_201_CREATED, headers=headers)

关于python - Django Rest API Djoser 刷新和访问 token 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61431650/

相关文章:

python - 我什么时候应该在 Django 中使用惰性函数

Python 桌面应用程序

django - 在 django 命令中调用自己的 API 端点

python - numpy中不同形状数组之间的乘法

python - 如何从boto获取当前用户所在的区域?

Python - 遍历栅格单元格,非常慢

python - 创建表时Django MySQL错误

javascript - 表单数据未发送到服务器

django - 我如何在 django-rest-framework 中制作 'view_count'?

django - CSRF token 在第二篇 Django Rest Framework 上失败