[英]Django Authentication Login returns nothing
我正在嘗試使用django authenticate登錄用戶。 即使電子郵件和密碼正確,也不會返回任何內容。 它只是重新加載頁面,而不執行任何操作。 我已經檢查過,並且我使用的電子郵件和密碼已存儲在數據庫中,因此該帳戶存在,但登錄后無任何作用。 我正在使用Django 2。
Views.py
def signup(request):
if request.method == "POST":
firstname = request.POST.get('firstname')
lastname = request.POST.get('lastname')
email = request.POST.get('email')
password = request.POST.get('password')
passwordagain = request.POST.get('passwordagain')
areacode = request.POST.get('areacode')
number = request.POST.get('number')
userdetails = CustomUser(firstname=firstname,lastname=lastname,email=email,password=password, areacode=areacode, number=number)
userdetails.save()
return render(request, 'main/accountconfirmationpage.html')
else:
return render(request,'main/signup.html')
def login(request):
email=request.POST.get('email')
password=request.POST.get('password')
user = authenticate(request, email=email, password=password)
if user is not None:
if user.is_active:
login(request, user)
return render(request,'main/dashboard.html')
else:
return render(request, 'main/login.html')
from django.db import models
Models.py
# Create your models here.
class CustomUser(models.Model):
firstname = models.CharField(max_length=30)
lastname = models.CharField(max_length=30)
email = models.EmailField(max_length=30)
password = models.CharField(max_length=100)
areacode = models.CharField(max_length=4)
number = models.CharField(max_length=30)
我認為問題出在您的注冊上。 您沒有在signup
視圖中正確存儲密碼。
userdetails = CustomUser(firstname=firstname,lastname=lastname,email=email,password=password, areacode=areacode, number=number) # <-- Here
userdetails.save()
由於您沒有正確存儲密碼(當前將其存儲為純文本而不是哈希),因此, authenticate
功能無法獲取用戶。
因此,您需要這樣設置密碼:
userdetails = CustomUser(firstname=firstname,lastname=lastname,email=email, areacode=areacode, number=number)
userdetails.set_password(password)
userdetails.save()
有關更多詳細信息,請在此處檢查set_password函數。
您需要像這樣擴展Django用戶模型:
Models.py
from django.db import models
from django.contrib.auth.models import User
from django.db.models.signals import post_save
from django.dispatch import receiver
#this will extend User model with your own model
class CustomUser(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
# all the other fields you mentioned except areacode and number
# are already in User model so don't need to add them here
areacode = models.CharField(max_length=4)
number = models.CharField(max_length=30)
# Below code will hook the create_custom_user and save_custom_user methods
# to the User model, whenever a save event occurs
@receiver(post_save, sender=User)
def create_custom_user(sender, instance, created, **kwargs):
if created:
CustomeUser.objects.create(user=instance)
@receiver(post_save, sender=User):
def save_custom_user(sender, instance, **kwargs):
instance.customeuser.save()
現在,您可以在以下視圖中使用CustomModel
創建用戶:
Views.py
from django.contrib.auth.models import User
def signup(request):
if request.method == "POST":
# I would suggest to use django forms
# instead of getting the values directly from request.POST
user = User(firstname=firstname, lastname=lastname, email=email)
user.customuser.areacode = areacode
user.customuser.number = number
user.set_password(password)
user.save()
# rest of the code
Django中的表單文檔
還用於登錄的電子郵件,而不是用戶名的用戶,你需要編寫一個認證后端為在你注冊它settings.py
看看這里
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.