Django Встроенная форма AuthenticationForm не проверяет пользователя - PullRequest
0 голосов
/ 11 января 2019

Я пытаюсь создать систему входа в систему с помощью инфраструктуры Django. Я расширил UserCreationForm, чтобы добавить имена и электронные письма. Теперь, когда у меня есть пользователи в базе данных, я пытаюсь аутентифицировать их и войти в систему. Однако, когда я вызываю встроенный класс AuthenticationForm, создаю экземпляр с данными публикации и пытаюсь аутентифицировать пользователя, я не получаю пользователь вернулся и аутентификация не удалась. Весь код для файла views.py приведен ниже. Я попытался прочитать исходный код AuthenticationForm, но ничего из этого не помогает. Есть предложения?

from django.shortcuts import render, redirect
from django.contrib.auth import authenticate, login
from django.contrib.auth.forms import UserCreationForm, AuthenticationForm
from django.db import models
from django import forms
from django.forms import EmailField
from django.forms import CharField
from django.utils.translation import ugettext_lazy as _
from django.contrib.auth.models import User


class SignUpForm(UserCreationForm):
    email = EmailField(label=_("Email address"), required=True, help_text=_("Required."))

    class Meta:
        model = User
        fields = ('email', 'username', 'first_name', 'last_name',)

    def save(self, commit=True):
        user = super(UserCreationForm, self).save(commit=False)
        user.email = self.cleaned_data["email"]
        user.firstName = self.cleaned_data["first_name"]
        user.lastName = self.cleaned_data["last_name"]
        user.set_password(self.cleaned_data["password1"])

        if commit:
            user.save()
            return user




def signup(request):
    if request.method == 'POST': # if sending data to the server
        form = SignUpForm(request.POST)# creates form from request data
        if form.is_valid():
            user = form.save() # at this point, need to set user permissions, attach to user themselves? Add permissions this way?
            #            user.groups.set('tutors')
            user.save()

#            print(user.get_all_permissions()) # gets all permissions of user
#            print(user.groups.values_list('name',flat=True))
            # set permissions here
            # once set permissions, can close off the rest of the site and continue
            return redirect('/user/signup')
        else: # if form isn't valid
            errorMessage = True # sets flag to display error in HTML page
            form = SignUpForm()
            dict = {'errorMessage': errorMessage, 'form': form}
            return render(request, 'user/signup.html', dict) #
# pass in
    else: # if get request, return new form
        form = SignUpForm()
        return render(request, 'user/signup.html', {'form': form}) # return rendered form




#
#
#
def log_in(request):
    if request.method == 'POST':
        # need to get user from log in form

        form = AuthenticationForm(request.POST) # form isn't valid because user name isn't being passed in?
        print(form)
        user = form.get_user()
        print(user)
        # authentication form expects user name and password, needs to accept email
        if form.is_valid(): # WHY ISN'T THIS VALID
            # where to get user?
            user = form.get_user
            print("Groups: ")
            print(user.groups)

            return render(request, 'user/log_in.html', {'form': form}) #

        else:
            print("Not valid")
            return render(request, 'user/log_in.html', {'form': form}) #

````

1 Ответ

0 голосов
/ 11 января 2019

Для будущих ссылок: Нужно использовать AuthenticationForm с этим параметром: form = AuthenticationForm (data = request.POST)

Это позволит правильно проверить.

...