簡體   English   中英

Django身份驗證登錄不返回任何內容

[英]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.

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