我有两种类型的用户。对于其中一个可以从get_user_model()获得模型的主要用户之一,这是可以的,并且端点是:
导入: no main manifest attribute,
路径: from rest_framework_jwt.views import obtain_jwt_token
path("api/token/", obtain_jwt_token, name="user_jwt")
当我提供用于生成令牌的主要用户凭据时,一切都很好。但是对于其他类型的用户 Teacher ,它需要对djangorestframework-jwt核心代码进行一些更改。 我知道它使用用户名作为默认字段进行登录。对于主要用户,可以,因为它采用这种方式:
http://127.0.0.1:8000/users/api/token/
在这种情况下是电子邮件。我已经在模型中定义了。 但是对于其他类型的用户,它尝试通过这种方式获取用户名:
username_field = get_user_model().USERNAME_FIELD
这是因为用户没有get_username()属性,因为它是常规模型,并且不会从任何模型继承。 所以我需要编辑:
def get_username(user):
try:
username = user.get_username()
except AttributeError:
username = user.username
return username
到
username = user.username
现在,当我引用自定义身份验证方法时,它会生成令牌。但是对于需要身份验证的访问/请求方法,它将返回401未经授权的无效签名。
出什么问题了?应该如何为我的第二个模型创建自定义身份验证?