Django Rest Auth:注册时需要另一个字段
我正在使用Django管理一些用户数据。我想让这些数据背后的人能够通过注册并将他们的帐户连接到现有数据(立即)来查看这些数据 因此,我会给他们一个身份验证令牌,打印在一张纸上,为了将他们已经存在的数据连接到他们的帐户,他们必须发送该令牌以及他们想要的用户名、电子邮件、密码等 我的Userdata模型如下所示:Django Rest Auth:注册时需要另一个字段,django,django-rest-framework,django-allauth,django-rest-auth,Django,Django Rest Framework,Django Allauth,Django Rest Auth,我正在使用Django管理一些用户数据。我想让这些数据背后的人能够通过注册并将他们的帐户连接到现有数据(立即)来查看这些数据 因此,我会给他们一个身份验证令牌,打印在一张纸上,为了将他们已经存在的数据连接到他们的帐户,他们必须发送该令牌以及他们想要的用户名、电子邮件、密码等 我的Userdata模型如下所示: class Userdata(models.Model): number = models.IntegerField(primary_key=True) first_nam
class Userdata(models.Model):
number = models.IntegerField(primary_key=True)
first_name = models.CharField(max_length=128)
last_name = models.CharField(max_length=128)
useraccount = models.OneToOneField(get_user_model())
auth_token = models.CharField(max_length=12, default="DUMMY", unique=True)
因此,我想更改注册过程,使用djang rest auth和allauth检查userdata
表中是否存在一行,其中auth_令牌等于注册时提供的令牌
如果,则我想将此行中的useraccount
字段设置为新创建的帐户,如果不是,则我想引发错误并停止帐户注册
我现在完全迷路了,不知道从哪里开始。我真的会把任何暗示传达到正确的方向
谢谢大家! 您需要覆盖序列化程序中的验证方法
class RegisterSerializer(serializers.Serializer)
我猜你在用
然后覆盖序列化程序
class RegisterSerializer(serializers.Serializer)
哪个在
文件多亏了@somil,我终于想出了以下可行但不干净的解决方案
from rest_auth.registration.serializers import RegisterSerializer
from apps.FOOBAR.models import Userdata
# ...
class TokenRegisterSerializer(RegisterSerializer):
pass
# adding the token field to the default serializer
token = serializers.CharField(write_only=True)
# adding a token validator: check if there is a userdata with this token
def validate_token(self, token):
try:
Userdata.objects.get(auth_token=token)
return token
except Patient.DoesNotExist:
raise serializers.ValidationError(
"Token seems to be invalid, try again")
# this method is called at save
def custom_signup(self, request, user):
# connect the data with the user
data = Userdata.objects.get(
auth_token=self.validated_data.get('token', ''))
data.useraccount = user
data.save()
并且,在settings.py中
REST_AUTH_REGISTER_SERIALIZERS = {
'REGISTER_SERIALIZER': 'apps.api.serializers.TokenRegisterSerializer',
}
到目前为止,谢谢你,我会再深入一点。RegisterSerializer中的自定义注册方法是专门被覆盖的,所以我认为这根本不是一种肮脏的方法。我想这正是你应该做的。