Как использовать пользовательскую аутентификацию в моем представлении

#python #django-2.0

#python #django-2.0

Вопрос:

У меня есть пользовательский сервер аутентификации, который регистрирует пользователя, используя либо имя пользователя, либо адрес электронной почты. Но он продолжает выдавать несколько ошибок:

auth_backend.py:

 class EmailOrUsernameModelBackend(ModelBackend):
    """
    This is a ModelBacked that allows authentication with either a username or an email address.
    """
    def authenticate(self, username=None, password=None):
        if '@' in username:
            kwargs = {'email': username}
        else:
            kwargs = {'username': username}
        try:
            user = Farmer.objects.get(**kwargs)
            if user.check_password(password):
                return user
        except Farmer.DoesNotExist:
            return None

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


authenticate = EmailOrUsernameModelBackend.authenticate
  

views.py:

 from .auth_backend import authenticate

def user_login(request):
    if request.method == 'POST':
        email = request.POST.get('email')
        password = request.POST.get('password')

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

        if user is_active:
            login(request, user)
            return redirect('stories')
        else:
            return HttpResponse("Invalid login details given")
    else:
        return render(request, 'stories/login.html', {})
  

Я продолжаю получать либо self is missing , либо Invalid login details given даже при использовании правильных учетных данных.

Комментарии:

1.В authenticate вы передаете адрес электронной почты return Farmer.objects.get(email=email, password=password) , однако в user_login вы передаете имя пользователя user = authenticate(username=email, password=password) . Это опечатка?

2. Спасибо. Это опечатка. Я внес изменения в файл.

3. Похоже, что ваша аутентификация, вероятно, работает нормально, но пользователь неактивен ( is_active = False ). Если аутентификация завершается неудачей, то она возвращается None , и в этом случае вы получите исключение для if user.is_active .

4. Спасибо, но с моей стороны пользователь активен…

5. О, я удалил user.check_password(user.password) из auth_backend, и это работает. Спасибо всем.