Как получить доступ к запросу в пользовательской аутентификации django? - PullRequest
9 голосов
/ 15 августа 2010

Я хочу сделать следующее с аутентификацией django:

  • Журнал неверных попыток входа в систему
  • Временно заблокировать учетные записи после числа неправильных попыток входа в систему «x»
  • Журнал успешных входов в систему.

Я думал, что решением будет пользовательский бэкэнд для аутентификации.

Я могу делать большую часть того, что я хочу, но я хочу зарегистрировать IP и REMOTE_HOST пользователя, делающего попытку.

как я могу получить доступ к объекту запроса в бэкенде аутентификации?

Спасибо

Ответы [ 2 ]

10 голосов
/ 15 августа 2010

Бэкэнд аутентификации может принимать любое количество пользовательских параметров для метода authenticate().Например:

class MyBackend:
    def authenticate(self, username=None, password=None, request=None):
         # check username, password
         if request is not None:
             # log values from request object

Если вы вызываете функцию authenticate в своем собственном представлении, вы можете передать объект запроса:

from django.contrib.auth import authenticate

def login(request):
    # discover username and password
    authenticate(username=username, password=password, request=request)
    # continue as normal

Если вы используете представление входа в систему django (или администраторалогин), у вас не будет дополнительной информации.Проще говоря, вам придется использовать свой собственный вид входа в систему.

Кроме того, будьте осторожны при автоматической блокировке учетных записей: вы позволяете кому-то сознательно блокировать одну из учетных записей вашего пользователя (отказ в обслуживании).Есть способы обойти это.Кроме того, убедитесь, что в журнале неверных попыток нет паролей.

0 голосов
/ 25 января 2019

В последних версиях Django authenticate () принимает «запрос» в качестве первого параметра:

  • опционально, поскольку Django 1.1
  • требуется, поскольку Django 2.1

См .:

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