即使用户名和密码正确,Django身份验证也始终返回None

时间:2019-04-17 16:50:46

标签: django python-3.x authentication

我正在尝试使用django创建网页。用户可以在其中注册和登录页面的位置。但是,当我尝试登录时,即使输入的密码和用户名正确,authenticate函数也返回None。 我正在使用Django版本2.1.2和Python 3.5

我尝试添加
AUTHENTICATION_BACKENDS = ('django.contrib.auth.backends.ModelBackend',) 在settings.py

这是我用于注册的功能。

def SignUp(request):
    countryobj = Country.objects.all()
    if request.method == 'POST':
        form = CustomUserCreationForm(request.POST or None)
        gr=request.POST.get('grade')
        if gr == 'Grade':
            messages.add_message(request, messages.WARNING, 'Select Any Grade')
            return render(request, 'authentication/registration.html', {'form': form, 'countries': countryobj})

        if form.is_valid():
            print("hihihih")
            user = form.save()
            user.refresh_from_db()
            username= request.POST.get('username')
            user.password=form.cleaned_data.get('password1')
            user.student.birthdate = form.cleaned_data.get('birthdate')
            user.student.school_name = form.cleaned_data.get('school_name')
            user.student.individual = form.cleaned_data.get('individual')
            user.student.school_address = form.cleaned_data.get('school_address')
            user.student.country = form.cleaned_data.get('country')
            user.student.state = form.cleaned_data.get('state')
            user.student.communication_address = form.cleaned_data.get('communication_address')
            user.student.c_country = form.cleaned_data.get('c_country')
            user.student.c_state = form.cleaned_data.get('c_state')
            user.student.grade = form.cleaned_data.get('grade')
            user.student.cost = form.cleaned_data.get('cost')
            user.student.total = form.cleaned_data.get('total')
            user.student.type_user = form.cleaned_data.get('type_user')
            user.student.currency=form.cleaned_data.get('currency_code')
            user.save()
            subject = 'Registration Successfull'
            message = 'You have successfully completed registration....'+'\n'+'Username:' +user.username+'\n'+ 'Password:' +user.password
            email_from = settings.EMAIL_HOST_USER
            recipient_list = [user.email]
            send_mail(subject, message, email_from, recipient_list)
            messages.add_message(request, messages.SUCCESS, 'Registration Successfull .. Check E-mail for credentials')
            return redirect('login')
        else:
            form = CustomUserCreationForm()
            return render(request, 'authentication/registration.html', {'form': form,'countries':countryobj})
    else:
        form = CustomUserCreationForm()
        print("lalala")
        # return render(request, 'authentication/registration.html')
        print(countryobj)
        return render(request, 'authentication/registration.html',{'form':form,'countries':countryobj})

这是我用于登录的功能

class getLogin(View):
    def get(self, request):
        if request.user.is_authenticated:

            return render(request, "authentication/signin.html")
        else:
            return render(request,"authentication/signin.html")

    def post(self, request):
        user = request.POST.get('user')
        password = request.POST.get('pass')
        usernamelog = User.objects.get(username=user)
        auth = authenticate(username=usernamelog, password=password)
        print("auth",auth)
        if auth:
            request.session['user']=auth.id
            request.session['grade']=auth.student.grade
            print("re",request.session['user'])
            print("ath",auth.username)
            request.session['username']=auth.username
            print("usr", request.session['username'])
            request.session['super']=auth.is_superuser
            print("ddd",auth.student.grade)
            # request.session['auth'] = auth.is_superuser
            if auth.is_superuser:
                return render(request,"app/admin.html")
            else:
                student_id=request.session['user']
                grade = request.session['grade']
                ex = Exam.objects.filter(level=grade)
                code = Code.objects.filter(student_id=student_id)

                return render(request, "app/student.html", {'link': ex, 'code': code,'profile':student_id})

        else:

            messages.add_message(request, messages.ERROR, 'Username or password mismatch')
            return redirect('login')

即使给定的用户名和密码正确,我也无法对用户进行身份验证

1 个答案:

答案 0 :(得分:0)

首先,正如Daniel Roseman指出的那样,您正在使用未加密的密码覆盖正确保存的用户对象。如果要保存Student模型,则应调用user.student.save()而不是user.save()

def SignUp(request):
    countryobj = Country.objects.all()
    if request.method == 'POST':
        form = CustomUserCreationForm(request.POST or None)
        gr=request.POST.get('grade')
        if gr == 'Grade':
            messages.add_message(request, messages.WARNING, 'Select Any Grade')
            return render(request, 'authentication/registration.html', {'form': form, 'countries': countryobj})

        if form.is_valid():
            print("hihihih")
            user = form.save()
            user.student.birthdate = form.cleaned_data.get('birthdate')
            user.student.school_name = form.cleaned_data.get('school_name')
            user.student.individual = form.cleaned_data.get('individual')
            user.student.school_address = form.cleaned_data.get('school_address')
            user.student.country = form.cleaned_data.get('country')
            user.student.state = form.cleaned_data.get('state')
            user.student.communication_address = form.cleaned_data.get('communication_address')
            user.student.c_country = form.cleaned_data.get('c_country')
            user.student.c_state = form.cleaned_data.get('c_state')
            user.student.grade = form.cleaned_data.get('grade')
            user.student.cost = form.cleaned_data.get('cost')
            user.student.total = form.cleaned_data.get('total')
            user.student.type_user = form.cleaned_data.get('type_user')
            user.student.currency=form.cleaned_data.get('currency_code')

            user.student.save()  # this will save the Student data

            subject = 'Registration Successfull'
            message = 'You have successfully completed registration....'+'\n'+'Username:' +user.username+'\n'+ 'Password:' +user.password
            email_from = settings.EMAIL_HOST_USER
            recipient_list = [user.email]
            send_mail(subject, message, email_from, recipient_list)
            messages.add_message(request, messages.SUCCESS, 'Registration Successfull .. Check E-mail for credentials')
            return redirect('login')
        else:
            form = CustomUserCreationForm()
            return render(request, 'authentication/registration.html', {'form': form,'countries':countryobj})
    else:
        form = CustomUserCreationForm()
        print("lalala")
        # return render(request, 'authentication/registration.html')
        print(countryobj)
        return render(request, 'authentication/registration.html',{'form':form,'countries':countryobj})