簡體   English   中英

Django 用戶身份驗證不起作用,如何修復我的登錄?

[英]Django user authentication does not work, how can I fix my login?

我正在使用 django-email-verification 應用程序,我不得不更改用戶的注冊方式,但我將登錄身份驗證部分保持不變。 每次我嘗試登錄時,它都不允許我登錄並說憑據錯誤。 我還使用電子郵件作為用戶名。 我認為它的:
user = auth.authenticate(username=request.POST['username'], password=request.POST['password'])
這需要改變。 請問如何修復登錄?

from django.shortcuts import render, redirect
from django.contrib.auth.models import User
from django.contrib import auth
from django.contrib.auth import get_user_model
from django_email_verification import sendConfirm


def signup(request):
    if request.method == 'POST':
        if request.POST['pass1'] == request.POST['pass2']:
            try:
                user = User.objects.get(username=request.POST['username'])
                return render(request, 'accounts/signup.html', {'error': 'Email is already registered'})
            except User.DoesNotExist:
                '''user = User.objects.create_user(request.POST['username'], password=request.POST['pass1'])
                auth.login(request, user)'''
                user = get_user_model().objects.create(username=request.POST['username'], password=request.POST['pass1'], email=request.POST['username'])
                sendConfirm(user)
                return redirect('home')
        else:
            return render(request, 'accounts/signup.html', {'error': 'Passwords must match'})
    else:
        return render(request, 'accounts/signup.html')

def login(request):
    if request.method == 'POST':
        user = auth.authenticate(username=request.POST['username'], password=request.POST['password'])
        if user is not None:
            auth.login(request, user)
            return redirect('home')
        else:
            return render(request, 'accounts/login.html',{'error':'username or password is incorrect.'})
    else:
        return render(request, 'accounts/login.html')

def logout(request):
    if request.method == 'POST':
        auth.logout(request)
        return redirect('home')

問題不在於身份驗證,而在於創建用戶。 密碼通常是散列的。 .create(…) function [Django-doc]不會hash 這些,您可以使用.create_user(…) [Django-doc]代替:

user = get_user_model().objects.create_user(
    username=request.POST['username'],
    password=request.POST['pass1'],
    email=request.POST['username']
)

.create_user(…) function 是 function 用戶 model 的經理通常應該提供的。 對於(大多數)用戶模型,這將在數據庫中存儲密碼的hash

暫無
暫無

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

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