2010-08-15 2 views
8

я хочу сделать следующее с аутентификацией Джанго:Как получить доступ к запросу в пользовательской аутентификации django?

  • Входа некорректные логарифмический в попытках
  • Временно блокировки счетов после ряда «х» неправильных логарифмов в попытках
  • журнал успешных входов в систему.

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

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

Как я могу получить доступ к объекту запроса в архиве auth?

Благодаря

ответ

10

аутентификации бэкенд может принимать любое количество пользовательских параметров для метода 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 

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

from django.contrib.auth import authenticate 

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

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

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

+0

Я расширяю ModelBackend - python не позволяет мне перегружать методы? Что было бы хорошим способом добиться этого? Просто переименуйте метод «authenticate» и позвоните, что на мой взгляд? – Roger

+0

Что мне нужно, чтобы ввести вид входа? просто скопируйте весь текущий вход в аккаунт Contrib.auth? Я не понимаю, потому что этот метод никогда не вызывает «authenticate» ... – Roger

+0

Вы можете наверняка перегрузиться в python. 'contrib.auth' требует, чтобы бэкэнды имели метод' authenticate', поэтому вам придется называть это. –

Смежные вопросы