【问题标题】:Return more than just the Auth Token with Django Rest + Djoser?使用 Django Rest + Djoser 返回的不仅仅是 Auth Token?
【发布时间】:2020-04-07 08:13:29
【问题描述】:

我使用 Django REST 和 Djoser 作为我的身份验证服务。但是,当向 djoser auth 端点发出 post 请求时,例如.../auth/token/login,我得到的唯一回复是auth_token: xxxxx

例如,如果我发出成功的发布请求,例如:

{
  "username": "joe@gmail.com",
  "password": "test12345"
}

我的回答是

"auth_token": "XXXXXXXX"

但我想检索的不仅仅是令牌,例如

"auth_token": "XXXXXXXX",
"user_id": 8

你知道如何做到这一点吗?

【问题讨论】:

  • 问题有点不清楚,你想解决什么问题?由于您发送用户名和密码来获取令牌,您真的需要/想要在响应中取回它们吗?
  • 基本上,当我使用用户名和密码向.../auth/token/login 发出发布请求时 - 如果该密码和用户名有效,我会以"auth_token": "xxxxx" 的形式回复。我想回复"auth_token": "xxxx", "user_id": 8之类的东西
  • 您需要自定义 Djoser 使用的类。一个很好的例子已经在 Django 文档中:django-rest-framework.org/api-guide/authentication/…,请参阅 CustomAuthToken(ObtainAuthToken) 类示例。

标签: django django-rest-framework djoser


【解决方案1】:

创建您自己的自定义令牌获取视图,如下所示,

from rest_framework.authtoken.views import ObtainAuthToken
from rest_framework.authtoken.models import Token


class TokenObtainView(ObtainAuthToken):
    def post(self, request, *args, **kwargs):
        serializer = self.serializer_class(data=request.data,
                                           context={'request': request})
        serializer.is_valid(raise_exception=True)
        user = serializer.validated_data['user']
        token, created = Token.objects.get_or_create(user=user)
        custom_response = {
            'token': token.key,
            'user_id': user.id
        }
        return Response(custom_response)

然后在你的 urls.py

中连接你的 TokenObtainView
urlpatterns = [
    # other patterns
    path('path/to/your/custom/token/view/', views.TokenObtainView.as_view(), name='new-token,obtain-view')
]

现在开始,您应该使用端点path/to/your/custom/token/view/ 来获取您的自定义响应。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-07-13
    • 2017-12-02
    • 2019-06-26
    • 2017-05-26
    • 2017-04-30
    • 2019-06-07
    • 2018-07-31
    相关资源
    最近更新 更多