Django Auth.authentication始终不为电子邮件返回任何内容

时间:2019-07-15 17:15:48

标签: python django

我正在尝试实现注册和登录功能。

这是我的 views.py

此处auth.authenticate

def login(request):

    if request.method  == 'POST':
        f = auth.authenticate(email = request.POST['email'], password = request.POST['password'])
        print(f)
        if f is not None:
            auth.login(request,f)
            return redirect('home')
        else:
            return render(request,'login.html',{'error':'Wrong Username or password'})
    else:
        return render(request, 'login.html')

它总是返回None,如果我更改为user并尝试使用用户名和密码登录,则它可以正常工作,但不适用于电子邮件和密码。 即

 f = auth.authenticate(username= request.POST['username'], password = request.POST['password'])

我尝试了request.get.POST('email')但没有用,并且还检查了request.POST['email']request.POST['password']包含有效信息。

1 个答案:

答案 0 :(得分:1)

Django默认使用用户名字段进行身份验证。如果要使用其他字段进行身份验证,则应扩展AbstractBaseUser并将电子邮件设置为身份验证字段。

对于settings.py:

AUTH_USER_MODEL = 'appname.User'

在您的模型中。py:

from django.contrib.auth.models import AbstractBaseUser
from django.contrib.auth.models import BaseUserManager

class MyUserManager(BaseUserManager):
    def create_user(self, email, password=None):
        if not email:
            raise ValueError('Users must have an email address')
        user = self.model(
            email=self.normalize_email(email),
        )
        user.set_password(password)
        user.save(using=self._db)
        return user

    def create_superuser(self, email, password):
        user = self.create_user(email,
            password=password,
        )
        user.admin = True
        user.save(using=self._db)
        return user

class User(AbstractBaseUser):
    email = models.EmailField(max_length=100, unique=True)
    #other fields..

    objects = MyUserManager()

    USERNAME_FIELD = 'email'

您还可以在Django - Login with Email

中看到另一种方法