Функция аутентификации не возвращает значения, поэтому пользователь не может войти в систему - PullRequest
0 голосов
/ 27 июня 2019
from django.shortcuts import render, redirect, reverse
from reg.models import Reg_page
from django.contrib.auth.models import User,auth
from django.contrib import messages
from django.contrib import auth
from django.contrib.auth import authenticate,login
from django.http import HttpResponseRedirect
from django.db.models import Q
from django.core.exceptions import ObjectDoesNotExist
from django.template import RequestContext
def user_login(request):
 if request.method == 'POST':
    username = request.POST['username']
    password = request.POST['password']
    print("username", username)
    print("password", password)
    user=auth.authenticate(username=username, password=password)
    #user=User.objects.filter(username=username, password=password).exists()
    print("value",user)
    if user:
        auth.login(request, user)
        return redirect("/welcome")
    else:
        return render(request, "login.html", {'error': 'username and password incorrect'})
else:
    return render(request, "login.html")

пользователь не может войти в систему, потому что функция autheticate не возвращает ни одного значения, это не дает никакой ошибки, поэтому дайте мне знать, как я могу это сделать?

1 Ответ

0 голосов
/ 27 июня 2019

Пароль - , а не , хранящийся в виде необработанного текста в базе данных, что было бы очень небезопасно.Если, например, ваша база данных каким-то образом взломана, то хакер имеет доступ ко всем паролям.

Общий механизм защиты: хеширование [wiki] , где одностороннее направлениеФункция хеширования используется для создания «дайджеста» и сохранения его в базе данных.Один аутентифицируется для запуска того же хеширования на пароле, и посмотреть, совпадают ли дайджесты.В результате, не зная пароля, сервер может узнать, равны ли эти два пароля (или очень вероятно, что они равны).

Если вы создаете необработанный объект User, вы не передаетепароль через функцию хеширования.Аутентификация с использованием дайджеста в базе данных - это не то же самое, что аутентификация с использованием оригинального пароля, так что на самом деле происходит сбой.Тот факт, что объект User существует с этим конкретным необработанным дайджестом, не означает, что это пароль, и, следовательно, вы не можете ожидать, что, поскольку .exists() успешен, аутентификация также успешна.

Чтобы установить пароль, вы должны использовать set_password [Django-doc] или изменить пароль с помощью changepasswordкоманда [Django-doc] .Если вы создаете пользователя, вы должны использовать create_user [Django-doc] для хеширования введенного пароля соответствующим образом.

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