发现了很多关于它的问题然而找不到smth帮助我 . Settings.py包含身份验证后端:
AUTHENTICATION_BACKENDS = (
'django.contrib.auth.backends.ModelBackend',
)
和auth用户模型:
AUTH_USER_MODEL = 'users.User'
用户模型继承自AbstractUser类:
class User(AbstractUser):
<some_fields>
然后3种类型的用户继承自User . 我注册了客户:
class Client(User, models.Model):
status = models.CharField(max_length=1, default='C', editable=False)
<some_fields>
当我通过激活链接激活用户时,一切正常 . 客户端是经过身份验证的用但是,当我尝试通过登录和密码验证时,始终返回None:
class LoginView(APIView):
def post(self, request):
qs = User.objects.filter(Q(email=request.data.get('user')) | Q(phone=request.data.get('user')))
if qs.exists():
username = qs.first().username
password = request.data.get('password')
user = authenticate(username=username, password=password)
if user is not None:
login(request, user)
return Response(CMD(user.id), status=status.HTTP_200_OK)
return Response({
'error': 'Invalid login / password',
}, status=status.HTTP_400_BAD_REQUEST)
我已经记录了返回所需客户端的qs,也没有用户名和密码,但authenticate返回None .
我想也许问题是客户端没有正确注册 . 这是SignUp表单:
class ClientSignupForm(forms.ModelForm):
class Meta:
model = Client
exclude = [
'username',
'date_joined',
]
def __init__(self, *args, **kwargs):
self.request = kwargs.pop('request', None)
super(ClientSignupForm, self).__init__(*args, **kwargs)
def clean(self):
<actions to validate captcha>
def save(self):
username = 'user' + str(User.objects.all().aggregate(Max('id'))['id__max'] + 1)
return Client.objects.create_user(**self.cleaned_data, username=username)