我需要自定义用户模型的基于令牌的身份验证方面的帮助。
我有一个继承自的用户模型AbstractBaseUser
:
class User(AbstractBaseUser):
email = models.EmailField(max_length=255, unique=True)
name = models.CharField(max_length=255, blank=True, null=True)
USERNAME_FIELD = 'email'
我有一个DojoMaster
扩展User
模型并使用post_save
接收器的模型:
models.py
class DojoMaster(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE, primary_key=True)
phone = models.BigIntegerField()
country = models.ForeignKey(Country, on_delete=models.CASCADE)
@receiver(post_save, sender=User)
def create_auth_token(sender, instance=None, created=False, **kwargs):
if created:
Token.objects.create(user=instance)
我添加了以下身份验证类:
settings.py
REST_FRAMEWORK = {
'Default_PERMISSION_CLASSES': (
'rest_framework.permissions.IsAuthenticated',
),
'DEFAULT_AUTHENTICATION_CLASSES': (
'rest_framework.authentication.BasicAuthentication',
'rest_framework.authentication.TokenAuthentication',
)
}
要访问令牌身份验证,我有:
urls.py
urlpatterns = [
url(r'^get-token', obtain_auth_token)
]
我有以下DojoMaster
用户:
{
"user": {
"name": "XYZ",
"email": "xyz@mail.com",
"password": "p@55w0rd"
},
"username": "iAmXYZ",
"phone": 2685211,
"country": 575
}
当我尝试获取身份验证令牌时,{"email": "xyz@mail.com", "password": "p@55w0rd"}
出现状态 400 错误{"username": ["This field is required."]}
使用时{"username": "xyz@mail.com", "password": "p@55w0rd"}
出现状态 400 错误{"non_field_errors": ["Unable to log in with provided credentials."]}
如何使用email
+password
为此类自定义用户执行基于令牌的身份验证?
您的帮助将不胜感激。