0

我需要自定义用户模型的基于令牌的身份验证方面的帮助。

我有一个继承自的用户模型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."]}

我尝试使用诸如thisthis等帖子的建议。

如何使用email+password为此类自定义用户执行基于令牌的身份验证?

您的帮助将不胜感激。

4

1 回答 1

0

为什么不只是从AbstractUser而不是AbstractBaseUser继承,因为您没有做太多的覆盖。只需声明

REQUIRED_FIELDS = ['email']
USERNAME_FIELD = "email"

希望这对你有用

于 2018-03-19T14:21:16.067 回答