Аутентификация без пароля Django - PullRequest
0 голосов
/ 07 мая 2020

Как указано в заголовке, я пытаюсь аутентифицировать пользователя без пароля. Я уже использовал это: django аутентификация без пароля , чтобы решить мою проблему с одним из моих приложений (на Django 2.0), но я хочу сделать то же самое в другом приложении, но это на Django 2.1. Когда я делаю ту же реализацию, моя пользовательская функция аутентификации никогда не вызывается. Таким образом, это не работает.

Текущая настройка в auth_backend.py:

from django.contrib.auth.backends import ModelBackend
from django.contrib.auth.models import User


class PasswordlessAuthBackend(ModelBackend):
    """Log in to Django without providing a password.

    """
    def authenticate(self, username=None):
        try:
            return User.objects.get(username=username)
        except User.DoesNotExist:
            return None

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

настройка в settings.py:

AUTHENTICATION_BACKENDS = [
# auth_backend.py implementing Class PasswordlessAuthBackend inside yourapp folder
    'yourapp.auth_backend.PasswordlessAuthBackend', 
# Default authentication of Django
    'django.contrib.auth.backends.ModelBackend',
]

но когда я пытаюсь views

user = authenticate(username=user.username)

Он никогда не попадает в мой собственный метод аутентификации. Любая помощь приветствуется!

Ответы [ 3 ]

0 голосов
/ 07 мая 2020

можете ли вы попробовать избежать бэкэнд по умолчанию.

изменить

AUTHENTICATION_BACKENDS = [
# auth_backend.py implementing Class PasswordlessAuthBackend inside yourapp folder
    'yourapp.auth_backend.PasswordlessAuthBackend', 
# Default authentication of Django
    'django.contrib.auth.backends.ModelBackend',
]

на

AUTHENTICATION_BACKENDS = [
# auth_backend.py implementing Class PasswordlessAuthBackend inside yourapp folder
    'yourapp.auth_backend.PasswordlessAuthBackend', 
]
0 голосов
/ 07 мая 2020

Итак, я решил свою проблему благодаря документам здесь: https://docs.djangoproject.com/en/2.1/topics/auth/customizing/

Все, что мне нужно было сделать, это функция аутентификации в auth_backend.py из

def authenticate(self, username=None):

to

def authenticate(self, request, username=None):

В документации сказано, что вы также можете изменить delcaration класса, чтобы не включать ModelBackend, но это сработало в любом случае.

0 голосов
/ 07 мая 2020

У вас неверный путь к вашему серверу аутентификации в settings.py

yourapp.auth_backend.YourAuth

Должен быть

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