我如何从 djoser 包自定义登录 api?

How can i customize login api from djoser package?

我只想在登录响应中提供用户详细信息,

目前,我得到 'token''refresh' http://127.0.0.1:8000/auth/jwt/create/ JWT 登录 API 响应。

我想 return 使用登录用户详细信息

这里是 jwt/create/,

的响应快照

JWT Response Image

由于 djoser 在内部使用 django-rest-framework-simplejwt,您必须调用自定义视图而不是 TokenObtainPairView 来在 api 响应中添加用户的详细信息。 您可以通过以下步骤实现:

your_app/urls.py

您必须创建自己的自定义 url 才能自定义 JWT 创建 API 的 response.Add 下面 url 路径上面 "djoser.urls" 路径,以便调用此 url 而不是 djoser 的包 jwt/create url.

from your_app.views import CustomTokenObtainPairView   

urlpatterns = [
...
path('auth/jwt/token/', CustomTokenObtainPairView.as_view(), name='custom_token_obtain_pair'),
]

your_app/views.py

现在添加您的自定义视图 class 及其相应的序列化程序 class,您可以在其中为 api 响应添加用户属性。

from rest_framework_simplejwt.serializers import TokenObtainPairSerializer
from rest_framework_simplejwt.views import TokenObtainPairView

class CustomTokenObtainPairSerializer(TokenObtainPairSerializer):

    def validate(self, attrs):
        ## This data variable will contain refresh and access tokens
        data = super().validate(attrs)
        ## You can add more User model's attributes like username,email etc. in the data dictionary like this.
        data['user_name'] = self.user.username
        return data


class CustomTokenObtainPairView(TokenObtainPairView):
    serializer_class = CustomTokenObtainPairSerializer