【问题标题】:Django RF simplejwt returns only token, not user objectDjango RF simplejwt 只返回令牌,不返回用户对象
【发布时间】:2020-09-22 16:03:13
【问题描述】:

我有 React 应用和 Redux 商店。我现在正在进行身份验证。我的后端在 Django RF 上,对于 JWT 身份验证,我使用 simplejwt 库。问题是,这个库有一个“开箱即用”的视图 (/token),它在成功时返回一个 JWT 令牌。

问题是我需要在成功验证后在我的应用程序中有一个用户对象。因此,当用户登录时,它只返回一个令牌。但是如果用户登录了,我需要将用户重定向到他们的页面。

我当然可以覆盖这个 /token 视图并返回我想要的任何对象,但是为什么现在这样实现呢?

【问题讨论】:

  • 返回一个令牌,以便客​​户端(如您的 React 应用程序)可以使用它来发出经过身份验证的请求。这能回答你的问题吗?
  • 我需要在 Redux 存储中存储一个用户实例。我可能只使用令牌并在应用程序中进一步从 request.user 获取用户实例,但我需要一些用户信息才能在页面上呈现,例如电子邮件、姓名等。所以我觉得成功登录后返回一次是最好的解决方案。我已经发布了我是如何实现它的。

标签: django-rest-framework django-rest-framework-simplejwt


【解决方案1】:

看起来没有其他方法可以像这样覆盖 serializers.py 中的 validate() 方法:

class UserTokenObtainPairSerializer(TokenObtainPairSerializer):
    def validate(self, attrs):
        data = {
            'token': super().validate(attrs),
            'id': self.user.id,
            'email': self.user.email,
            'name': self.user.name,
        }
        return data

【讨论】:

    猜你喜欢
    • 2019-02-01
    • 2014-03-19
    • 2018-05-28
    • 2021-09-26
    • 1970-01-01
    • 2022-01-13
    • 2017-10-26
    • 2016-06-27
    • 2021-12-03
    相关资源
    最近更新 更多