2

我的要求是,我不想在 simplejwt 令牌身份验证中输入密码。根据我的要求,我通过继承TokenObtainPairSerializerinit()的方法在身份验证中添加了一个额外的字段 。

目前,我None在密码字段中传递,但仍向用户显示(djnago 管理门户)。我想要的是,我不想在使用 simplejwt 进行身份验证时向用户显示密码字段。

下面是我的代码,

from rest_framework_simplejwt.serializers import TokenObtainPairSerializer

class CustomSerializer(TokenObtainPairSerializer):

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.fields[self.username_field] = serializers.CharField()
        self.fields['password'] = PasswordField(default=None)
        self.fields['extra'] = serializers.CharField()

    def validate(self, attrs):
        pass

有什么方法可以将 PasswordField 设置为不可用,这样它就不会显示给用户?

4

1 回答 1

5

我已经按照下面提到的过程来解决问题,

  1. 覆盖TokenObtainPairSerializer__init__方法,如下所示,

  2. 使用del self.fields['password'],因此它不会询问您密码并添加您想要的任何字段。

class CustomSerializer(TokenObtainPairSerializer): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.fields[self.username_field] = serializers.CharField() del self.fields['password']

这真的很好用。我已经回答了一个几乎相同的问题,您可以在此处查看以获取更多知识。

让我知道是否有人对此问题有更好的解决方案。

于 2020-05-30T05:19:19.633 回答