使用来自自定义表(mysql)的凭据的Django登录身份验证不起作用

我正在尝试使用mysql数据库中的凭据登录,但是它无法正常工作。它对于管理员凭据正常工作。

views.py

 def logauth(request):
        if request.method == "POST":
            username = request.POST['username']
            password = request.POST['password']
            user = authenticate( username=username,password=password)

            if user is not None:
                messages.error(request,'if part : user is not  None')
                login(request,user)
                messages.error(request,'111')
                return redirect('emp')
            else:
                messages.error(request,'else part : user is None')
                return redirect('login_url')
        else:
            messages.error(request,'Please provide valid credentials')
            return render(request,'registration/login.html')

models.py

  class RegAuth(AbstractBaseUser):
        username = models.CharField(max_length=255)
        email = models.EmailField(unique="TRUE")
        password = models.CharField(max_length=255)
        mobile = models.CharField(max_length=12)
        registrationDate = models.DateTimeField(auto_now_add=True)
        last_login = models.DateTimeField(auto_now_add=True)

        objects = UserManager()

        is_anonymous = "FALSE"
        is_authenticated = "TRUE"

        is_active = False
        is_superuser = True

        username_FIELD = "email"
        REQUIRED_FIELDS = ["username","mobile"]

        class Meta:
            db_table = "bloggerauth"

        def __str__(self):
            return self.email

setting.py

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql','NAME': 'jayesh','USER': 'root','PASSWORD': 'root','HOST': 'localhost','PORT': '3306','OPTIONS': {
            'init_command': "SET sql_mode='STRICT_TRANS_TABLES'",},}
}

AUTHENTICATION_BACKENDS = ('polls.backends.MyBackEnd','django.contrib.auth.backends.ModelBackend',)
baili251810659 回答:使用来自自定义表(mysql)的凭据的Django登录身份验证不起作用

您必须在身份验证功能中传递电子邮件而不是用户名:

user = authenticate(email=email,password=password)

因为您已将USERNAME_FIELD定义为电子邮件:

USERNAME_FIELD = "email"
,

views.py

def logauth(request):
    if request.method == "POST":
        email = request.POST['username']
        password = request.POST['password']
        user = authenticate(request,email=email,password=password)

        if user is not None:
            messages.error(request,'if part : user is not  None')
            login(request,user)
            return redirect('emp')
        else:
            messages.error(request,'else part : user is None')
            return redirect('login_url')
    else:
        messages.error(request,'Please provide valid credentials')
        return render(request,'registration/login.html')

backends.py

class MyBackEnd(object):

    def authenticate(self,request,email=None,password=None):
        existing_user = RegAuth.objects.get(email=email,password=password)
        if not existing_user:
            # Checking the user UserData Custom DB.
            user_data = RegAuth.objects.get(email=email,password=password)
            if email == user_data.email:
                user = RegAuth.objects.create_user(email=email,password=password)
                user.save()
                return user
            else:
                return None
        else:
            return existing_user

    def get_user(self,email):
        try:
            return RegAuth.objects.get(email=email)
        except Exception as e:
            return False
本文链接:https://www.f2er.com/3103218.html

大家都在问