DRF SimpleJWT 删除密码并添加日期字段

DRF SimpleJWT remove password and add date field

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

使用 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/ ,这就是我所看到的(按预期工作)

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

This field may not be blank.

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

TypeError at /api/token/ object of type 'NoneType' has no len()

如何删除密码字段?另外,我怎样才能添加日期字段?

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

这是解决方案,

  1. 覆盖 TokenObtainPairSerializer class __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??

如果有人对此有更好的解决方案,请告诉我。