首页 > 解决方案 > Django Authenticate 也总是返回 None 并带有正确的凭据

问题描述

我正在为我的项目创建登录和注册页面,并使用 Django MySQL 数据库进行登录并创建用户,注册已正确完成,但登录功能对我不起作用。

PS: is_active 设置为 True 但这仍然不起作用

使用所有正确的信息,它显示无。我已经给出了文件和代码的所有必要部分

我尝试了所有方法,但似乎没有任何效果也尝试了 StackOverflow 上列出的一些解决方案,但仍然没有对我有用。

from django.shortcuts import render, redirect
from .models import Description
from django.http import HttpResponse
from django.contrib.auth.models import User
from django.contrib.auth import authenticate, login

# Create your views here.
def index(request):
    d = Description.objects.all()
    return render(request,'index.html',{'des':d})
def signup(request):
    if request.method == 'POST':
        first_name = request.POST['first']
        last_name = request.POST['last']
        user_name = request.POST['user']
        email = request.POST['email']
        pass1 = request.POST['password1']
        pass2 = request.POST['password2']
        if pass1 == pass2:
            if User.objects.filter(email=email).exists():
                print("Email taken")
            elif User.objects.filter(username=user_name).exists():
                print("Username taken")
            else:        
                user = User.objects.create_user(username = user_name, first_name=first_name,last_name=last_name, password=pass1, email=email)
                user.save()
                print("User created")
        else:
            print("Password Not Matching")  
        return redirect('/')      
    else:
        return render(request,'signup.html')   
def login(request):
    if request.method == 'POST':
        email = request.POST['email']         
        password = request.POST['password']
        print(email,password)
        user = authenticate(request, email=email, password=password)
        print(user)
        if user is not None:
            login(request, user)
            print("Logged in")
        else:
            print("not logged in")    
        return redirect('/')
    else:
        return HttpResponse("Invalid")        

标签: pythondjangoauthentication

解决方案


Djangoauthenticate方法允许仅使用用户名进行身份验证。您可以使用用户的电子邮件从用户模型中获取用户的用户名

username = User.objects.get(email=email).username
password = request.POST.get('password')

替换这个user = authenticate(request, email=email, password=password)

有了这个user = authenticate(request, username=username, password=password)


推荐阅读