Django用户身份验证不起作用,如何修复我的登录?

2024-05-01 01:21:17 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用django电子邮件验证应用程序,我必须更改用户的注册方式,但我保留了登录验证部分。每次我尝试登录时,它都不允许我登录,并说凭据错误。我还使用电子邮件作为用户名。我想是:
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')


Tags: djangofromimportauthreturnifrequesthtml
1条回答
网友
1楼 · 发布于 2024-05-01 01:21:17

问题不在于身份验证,而在于创建用户。密码通常是散列的。^{} function [Django-doc]而不是散列这些,您可以使用^{} [Django-doc]代替:

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

.create_user(…)函数是用户模型管理员通常应该提供的函数。对于(大多数)用户模型,这将在数据库中存储密码的散列

相关问题 更多 >