аутентификация пользователя не работает Django

пользователь не проходит аутентификацию, когда я пытаюсь войти в систему.

это мой регистрационный код

def register(request):
if request.method == "POST":
    username = request.POST["name"]
    email =  request.POST["email"]
    password = request.POST["password"]
    password2 = request.POST["password2"]

    try:
        if password2 != password:
            messages.error(request, "password did'nt match")
        elif User.objects.get(email=email):
            messages.error(request, "user already exists")
    except: 
        if email and username:
            user = User.objects.create_user(username=username, email=email)
            user.set_password(password)
            user.save()
            messages.success(request, "user created")
        else:
            messages.error(request, "Looks like user already exists")

return render(request, 'register.html', {})

это если мой код входа в систему, если я использую user.object.get для электронной почты и check_password для пароля, он работает, но когда я использую его аутентификацию, он не работает. печать аутентификации возвращает None

def login(request):

    if request.method == "POST":
        email = request.POST["email"]
        password = request.POST["password"]
        print email
        print password
        try:
            user = authenticate(email=email , password=password)
            if user is not None:
                login(request, user)                    
                return redirect('dashbord')
            else:
                messages.error(request, "password yesn't match")

        except:

            messages.error(request, "login fail plz check ur password or email again")


    return render(request, 'login.html', {})

person Neeraj Joon    schedule 17.07.2018    source источник
comment
Ваш elif User.objects.get(email=email): вызовет ошибку, если User еще не существует.   -  person Willem Van Onsem    schedule 17.07.2018
comment
Вы настроили Django для аутентификации по электронной почте? Документ показывает, что вы должны аутентифицироваться с помощью имени пользователя и пароля args, а не электронной почты и пароля. (Изменить: docs.djangoproject.com/fr/2.0/ тем/auth/default/ -> По умолчанию это имя пользователя и пароль, если в процессе аутентификации возникает PermissionDenied, функция возвращает значение None.)   -  person T.Nel    schedule 17.07.2018
comment
Верно. Вы можете войти, используя только имя пользователя и пароль по умолчанию.   -  person sam    schedule 17.07.2018
comment
Этот комментарий не имеет НИЧЕГО общего с решением вашей проблемы, поскольку в приведенных выше комментариях уже есть правильные вещи, которые можно попробовать, но, пожалуйста, проверьте синтаксис (did'nt,yesn't, plz) в ваших сообщениях об ошибках, это выходит из-под контроля.   -  person scharette    schedule 17.07.2018
comment
Правильное сокращение для yes+not — это y’ain’t, например, «О, черт возьми, вы не ввели правильный пароль».   -  person Rob L    schedule 17.07.2018
comment
@T.Nel Большинство веб-сайтов в наши дни используют электронную почту для регистрации и входа в систему. так что я должен сделать для аутентификации с помощью электронной почты? я должен изменить в дефолте? если да как мне это сделать?   -  person Neeraj Joon    schedule 18.07.2018
comment
@WillemVanOnsem я знаю это, поэтому я положил его внутрь try: там   -  person Neeraj Joon    schedule 18.07.2018
comment
@NeerajJoon stackoverflow.com/questions/37332190/django-login-with- электронная почта для аутентификации по электронной почте пользователя. Я разместил ответ, если ваш вопрос теперь решен.   -  person T.Nel    schedule 18.07.2018
comment
@NeerajJoon Обычно плохо не быть точным в отношении исключения, которое вы хотите поймать. Я рекомендую вам заменить except: на except ObjectDoesNotExist: . Вам придется сделать from django.core.exceptions import ObjectDoesNotExist   -  person T.Nel    schedule 18.07.2018


Ответы (1)


Согласно вашему комментарию, вы используете систему аутентификации по умолчанию, но вы выполняете аутентификацию с помощью этой строки:

user = authenticate(email=email , password=password)

Исправление, согласно вашему вопросу, таково:
email = request.POST["email"]

username = request.POST["name"]
user = authenticate(username=username , password=password)

По умолчанию django регистрируется с именем пользователя, а не с электронной почтой (см.: документация ).

Для вашего вопроса в комментарии это дубликат Django - Login with Email. Я приглашаю вас найти свое решение в принятом ответе.

person T.Nel    schedule 18.07.2018