Django authenticate всегда возвращает None, даже если имя пользователя и пароль верны - PullRequest
0 голосов
/ 17 апреля 2019

Я пытаюсь сделать веб-страницу, используя 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 голосов
/ 17 апреля 2019

Прежде всего, как отметил Дэниэл Роузман, вы перезаписываете правильно сохраненный пользовательский объект нехешированным паролем. Если вы хотите сохранить модель 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})

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...