微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

自定义身份验证在Django中的自定义用户模式中不起作用

如何解决自定义身份验证在Django中的自定义用户模式中不起作用

我创建了由用户名和密码组成的自定义用户模型,并使用通过用户名和密码登录,但是当我尝试登录登录名不起作用时,我还创建了自定义身份验证 backend.py 用于 models.py

中的自定义用户模型 HandleLogin

register_app / model.py

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

# Create your models here.
class Register(models.Model):
   
    class Meta:
        db_table = "register"

    id = models.AutoField(primary_key = True)
    first_name=models.CharField(max_length=20)
    last_name=models.CharField(max_length=20)
    email=models.EmailField()

class HandleloginManager(BaseUserManager):
    def create_user(self,username,password=None):
        if not username:
            raise ValueError("username is required")
        user = self.model(
            username = username,)
        user.set_password(password)
        user.save(using=self._db)
        return user

class Handlelogin(AbstractBaseUser):

    class Meta:
        db_table = "login"

    username = models.CharField(max_length=150,unique = True)
    password = models.CharField(max_length = 50)
    register = models.OnetoOneField(Register,on_delete=models.CASCADE)

    USERNAME_FIELD="username"

    REQUIRES_FIELD=['password']

    objects = HandleloginManager()

register_app / views.py

from django.shortcuts import redirect,render,HttpResponse
from .models import Register,Handlelogin
from django.contrib.auth import authenticate,login

# Create your views here.
def home(request):
        return render(request,'home.html')

def register(request):
        if request.method == 'POST':
               
                add = Register()
                add.first_name= request.POST['firstname']
                add.last_name= request.POST['lastname']
                add.email= request.POST['email']
                add.save()
                
              
                d = Handlelogin.objects.create_user(
                         username=request.POST['username'],password=request.POST['password']
                )
                d.register = add
                d.save()
                
                return redirect('/')  

        else:
                return render(request,'register.html')

def users(request):

        reg = Register.objects.all()

        return render(request,'users.html',{'reg':reg})

def login_handle(request):
        if request.POST:
                username = request.POST['user']
                password = request.POST['pass']

                user = authenticate(username = username,password = password)
                
                if user is not None:
                        login(request,user)
                        return HttpResponse("Login Succesfully")
                else:
                        return HttpResponse("Invalid login")
                        
        return render(request,'login.html')

register_app / backend.py

from django.contrib.auth.backends import ModelBackend
from django.contrib.auth.hashers import check_password
from register_app.models import Handlelogin

class CustomBackend(ModelBackend):

    def authenticate(self,request,password=None):
        try:
            user = Handlelogin.objects.get(username = username)
            if user.check_password(password):
                return user
        except Handlelogin.DoesNotExist:
                return None

    def get_user(self,user_id):
        try:
            return Handlelogin.objects.get(pk=user_id)
        except Handlelogin.DoesNotExist:
            return None

我使用HTML表单而不是Django表单,并且添加自定义用户模型 AUTH_USER_MODEL =“ register_app.Handlelogin” 自定义后端注册 AUTHENTICATION_BACKENDS =('register_app.backends。 set.py文件中的“ CustomBackend”,)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。