Я хочу создать аутентификацию для моего проекта Django 1.11. Пользователь будет аутентифицирован, если запрос содержит заголовок: X_USERNAME
.
Я работаю с общими представлениями, поэтому я использую LoginRequiredMixin
для контроля доступа.
Я сделал этот класс пользовательской аутентификации:
class CustomAuthentication:
def authenticate(self, request):
username = request.META.get('X_USERNAME')
logging.warning(username)
if not username:
return None
try:
user = User.objects.get(username=username)
except User.DoesNotExist:
user = User(username=username)
user.is_staff = False
user.is_superuser = False
if request.META.get('X_GROUPNAME') == 'administrator':
user.is_staff = True
user.is_superuser = True
user.save()
return user, None
def get_user(self, user_id):
try:
return User.objects.get(pk=user_id)
except User.DoesNotExist:
return None
Я добавил это в своих настройках:
AUTHENTICATION_BACKENDS = ['path.to.file.CustomAuthentication']
Но я не могу заставить это работать. Я перенаправлен на /accounts/login/?next=
, который не существует.
Заранее спасибо!
EDIT:
Я также попытался создать подкласс, как описано здесь: Документация Django RemoteUser , так как это похоже на то, чего я хочу достичь:
class CustomAuthentication(RemoteUserMiddleware):
header = 'HTTP_X_USERNAME'
Это дало мне тот же результат.