Почему аутентификация Django всегда не возвращает ни одного - PullRequest
0 голосов
/ 29 марта 2019

У меня есть несколько вопросов

  1. почему Authenticate () всегда не возвращает ничего, но когда я пытался использовать Exists (), он возвращает пользователя?
  2. Можем ли мы просто использовать Exists () для входа в систему?

Я использую django 1.11.7 и представления на основе классов

это мои views.py

class ShopLoginView(FormView):
    template_name = 'shop/login.html'
    form_class = LoginForm
    success_url = '/shop/'

это мой forms.py

class LoginForm(forms.Form):

    email = forms.EmailField()
    password = forms.CharField()

    def clean(self):
        cleaned_data = super(LoginForm, self).clean()
        email  = cleaned_data.get("email")
        password  = cleaned_data.get("password")
        user = authenticate(username=email, password=password)

        if user is not None:
            print(user)
        else:
            print(user)
            raise forms.ValidationError("Wrong Email or Password")

это когда я использую метод Exists ()

class LoginForm(forms.Form):

    email = forms.EmailField()
    password = forms.CharField()

    def clean(self):
        cleaned_data = super(LoginForm, self).clean()
        email  = cleaned_data.get("email")
        password  = cleaned_data.get("password")
        user = User.objects.filter(email=email, password=password)

        if user.exists():
            print(user)
        else:
            print(user)
            raise forms.ValidationError("Wrong Email or Password")

есть идеи, что может происходить?

Ответы [ 2 ]

0 голосов
/ 29 марта 2019

Вы можете просто проверить аутентификацию следующим образом: аутентифицировать, декодировать хеш-пароль и затем сопоставить: -

 user = authenticate(username=username, password=password)
 if user and user.is_active:   
          print(user)
0 голосов
/ 29 марта 2019

Вы как-то сохранили пароль в виде обычного текста. Вы должны не иметь возможность использовать filter или exists для поиска пользователя по имени пользователя и паролю; простой текстовый пароль не должен совпадать.

authenticate всегда будет хэшировать пароль, который ему передан, и сравнивать его с существующей хэшированной версией в БД. Поскольку ваш сохраненный пароль не хеширован, он не совпадает.

Вы не показали, как создали пользователя, но вы всегда должны использовать create_user или устанавливать пароль с помощью set_password.

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