簡體   English   中英

Django 驗證方法不適用於自定義 Model

[英]Django Authenticate method not working on custom Model

我正在嘗試內置方法 authenticate() 來登錄員工,但這似乎不起作用。 我沒有使用 django 提供的默認 model 用戶,而是在這里使用了我自己的 model 員工。

這是我的views.py

def login(request):
    if request.method == 'POST':
        password = request.POST['password']
        emailid = request.POST['email']

        employee = auth.authenticate(username=emailid,password=password)

        if employee is not None:
            auth.login(request,employee)
            return render(request,'register/html')
        
            
                
        else:
            messages.error(request,'Email id dosent exist')
            return redirect('login')
            
    else:
        return render(request,'employee/login.html')  

而我的自定義代碼進行身份驗證

def login(request):
    if request.method == 'POST':
        password = request.POST['password']
        emailid = request.POST['username']

         if Employee.objects.filter(firstname=emailid).exists():
            if Employee.objects.filter(password=password):
                messages.success(request,'Loged Out')
                return redirect('vacant-rooms')
            else:
                messages.error(request,'Wrong emailid')
                return redirect('login')
        else:
            messages.error(request,'wrong password')
            return redirect('login')
     else:
        return render(request,'employee/login.html')

這是我的 model

class Employee(models.Model):
    firstname = models.CharField(max_length=15)
    lastname = models.CharField(max_length=15)
    age = models.IntegerField()
    sex = models.CharField(max_length=10)
    phoneno = models.IntegerField()
    emailid = models.CharField(max_length=25)
    address = models.CharField(max_length=50)
    salary = models.IntegerField()
    designation = models.CharField(max_length=10)
    password = models.CharField(max_length=10)
    aadharno = models.CharField(max_length=15)
    datejoined = models.DateField(default=timezone)

這可能是一個愚蠢的問題,但身份驗證不起作用是因為我的 model 中沒有用戶名字段嗎?

我認為你不應該那樣做。 Django 已經有一個用戶基礎設施,並且要使用身份驗證等功能,您需要繼承 AbstractUser 或 AbstractBaseUser 類之一。 如果你只是這樣定義模型,你必須做很多Django已經做過的工作,我絕對不推薦它。 我在下面留下了一些有用的文檔和文章。 如果您需要任何幫助,請寫評論,我會盡我所能提供幫助。

官方 Django Doc 定制認證

自定義用戶 Model

如何擴展用戶 Model

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM