【问题标题】:Return user object along side token using rest_framework_simplejwt使用 rest_framework_simplejwt 沿边令牌返回用户对象
【发布时间】:2021-09-26 20:53:34
【问题描述】:

我正在使用 django_rest_passwordreset 在 Django rest 框架上进行身份验证。

我按照他们的官方文档和登录教程进行操作,注册效果很好。

登录返回访问和刷新令牌。我想要做的也是在访问和刷新令牌旁边返回用户对象。

我有一个自定义模型

# auth/models.py
# Inherited from user
class MUser(AbstractUser, models.Model):
    email = models.EmailField(unique=True)
    role = models.CharField(max_length=40, default="student")

    USERNAME_FIELD = 'email'
    EMAIL_FIELD = 'email'
    REQUIRED_FIELDS = ['username', 'role']

序列化器

# auth/serializers.py
class TokenObtainPairSerializer(TokenObtainSerializer):
    @classmethod
    def get_token(cls, user):
        return RefreshToken.for_user(user)

    def validate(self, attrs):
        data = super().validate(attrs)

        refresh = self.get_token(self.user)

        data['refresh'] = str(refresh)
        data['access'] = str(refresh.access_token)

        if api_settings.UPDATE_LAST_LOGIN:
            update_last_login(None, self.user)

        return data

我的看法

# auth/views.py
class TokenObtainPairView(TokenViewBase):
    """
    Takes a set of user credentials and returns access and refresh JSON web
    token pair to prove the authentication of those credentials.
    """
    serializer_class = serializers.TokenObtainPairSerializer

总之,成功登录后,我收到了

{
   access: xxx,
   refresh: xxx,
   
   # I want to add this 
   user: {username, first_name, last_name, email, ...}
}

【问题讨论】:

  • 一个 ty 会很好:)

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


【解决方案1】:

我想这可能会对你有所帮助:

def validate(self, attrs):
    data = super().validate(attrs)

    refresh = self.get_token(self.user)

    data['refresh'] = str(refresh)
    data['access'] = str(refresh.access_token)

    @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
    my_user = User.objects.filter(pk=self.user.id).first()
    if my_user:
        # use user serelizor or parse required fields
        data['user'] = my_user
    @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

    if api_settings.UPDATE_LAST_LOGIN:
        update_last_login(None, self.user)

    return data

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-13
    • 2021-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多