Использование электронной почты в качестве входа в Django - PullRequest
0 голосов
/ 26 декабря 2018

Я не могу войти в django с правильным паролем и адресом электронной почты.вот мой код.

backends.py

 from django.contrib.auth.models import User

    class Emailbackend(object):

        def authenticate(self, username=None, password=None, **kwargs):
            try:
                user = User.objects.get(email=username)
            except User.MultipleObjectsReturned:
                user = User.objects.filter(email=username).order_by('id').first()
            except User.DoesNotExist:
                return None
            if getattr(user, 'is_active') and user.check_password(password):
                return user
            return None

        def get_user(self, user_id):
            try:
                User.objects.get(pk=user_id)
            except User.DoesNotExist:
                return None

Settings.py

AUTHENTICATION_BACKENDS = (
    'users.backends.Emailbackend',
)

Ответы [ 2 ]

0 голосов
/ 26 декабря 2018

На самом деле, authenticate метод ожидает, что аргумент request должен быть передан.Поэтому вам нужно объявить свой Backend следующим образом:

class Emailbackend(object):

    def authenticate(self, request, username=None, password=None, **kwargs):
        try:
        # rest of the code

Ссылка может быть найдена здесь .

0 голосов
/ 26 декабря 2018

сначала проверьте значение user в блоке try метода authenticate.Если он получил правильный результат, то проверьте следующий блок, какое user значение возвращается.

if getattr(user, 'is_active') and user.check_password(password):
    return user

Если это не работает, перейдите в свою базу данных и проверьте, доступно ли значение хэша вашего пароля.

Попробуйте эти ссылки ссылка1 ссылка2

...