问题描述
我正在使用django-rest-auth
包创建一个带有电话号码的自定义登录。我只是在代码中使用rest_auth.views.LoginView
来为令牌身份验证生成令牌。
这是我的序列化程序:
class LoginUserSerializer(serializers.Serializer):
phone = serializers.CharField()
password = serializers.CharField(
style={'input_type': 'password'}, trim_whitespace=False)
def validate(self, attrs):
phone = attrs.get('phone')
password = attrs.get('password')
if phone and password:
if User.objects.filter(phone=phone).exists():
user = authenticate(request=self.context.get('request'),
phone=phone, password=password)
else:
msg = {'detail': 'Phone number is not registered.',
'register': False}
raise serializers.ValidationError(msg)
if not user:
msg = {
'detail': 'Unable to log in with provided credentials.', 'register': True}
raise serializers.ValidationError(msg, code='authorization')
else:
msg = 'Must include "username" and "password".'
raise serializers.ValidationError(msg, code='authorization')
attrs['user'] = user
return attrs
这是我的看法:
from rest_auth.views import LoginView as RestLoginView
class Login(RestLoginView):
permission_classes = (permissions.AllowAny,)
def post(self, request, *args, **kwargs):
serializer = LoginUserSerializer(data=request.data)
serializer.is_valid(raise_exception=True)
user = serializer.validated_data['user']
login(request, user)
return super().post(request, format=None)
当我运行服务器时,我有这个页面,我不想有用户名和电子邮件字段。我想要电话号码,而不是这些。我如何解决这个问题?
推荐答案
在settings.py中,我忘记添加:
REST_AUTH_SERIALIZERS = {
'LOGIN_SERIALIZER': 'Accounts.serializers.LoginUserSerializer',
}