-1

我创建了一个从 AbstractBaseUser 扩展的自定义用户模型,其中我从用户那里获得的唯一数据是用户 ID、用户(用户名字段)和日期(必需,格式为dd-mm-yyyy)以及用户的创建工作正常,您可以从下一张图片中的数据库中看到

HeidiSQL中的用户表

使用password = Nonelast_login = None参考我不想要密码和 last_login 表。

然后,创建了一个只有经过身份验证的用户才能访问的视图。

为了处理身份验证,使用了 simpleJWT。在 urls.py

# JWT Token
path('api/token/', TokenObtainPairView.as_view(), name='token_obtain'),
# Get a new token before the old expires.
path('api/token/refresh/', TokenRefreshView.as_view, name='token_refresh'),

通过访问http://127.0.0.1:8000/api/token/,这就是我所看到的(按预期工作)

DRF 简单 JWT

我之前在另一个项目中使用包含该数据(用户和密码)的用户模型测试了用户和密码,并且工作正常。现在,在这里,如果我尝试使用现有用户发布但没有密码,我会收到警告并且无法发布

此字段不能为空。

没有密码的simpleJWT

如果我添加除空格以外的任何内容,则会出现以下错误

/api/token/ 类型为“NoneType”的对象的 TypeError 没有 len()

不工作简单jwt

如何删除密码字段?另外,我怎么能添加一个日期字段呢?

4

1 回答 1

0

我也面临同样的问题,不知何故我设法解决了这个问题。

这是解决方案,

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

  2. 使用del password它不会询问您密码并添加您想要的任何字段。

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

这真的很好用。

这是参考 - How to skip or remove password field in simplejwt token authentication in django rest framework??

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

于 2020-05-29T14:31:58.040 回答