Django - авторизированный пользователь с доменом электронной почты и без пароля - PullRequest
1 голос
/ 27 августа 2010

У меня есть запрос на изменение стандартного имени электронной почты и пароля для входа в Django, чтобы разрешить любому пользователю вход без пароля, но только если они находятся в определенном домене ... например somebody@example.com ... где пользователь может войти из-за того, что он находится в правильном домене.

Есть предложения?

Ответы [ 3 ]

5 голосов
/ 27 августа 2010

Предполагая, что «находясь в правильном домене» означает, что у них есть адрес электронной почты для соответствующего домена, вы можете написать пользовательский бэкэнд аутентификации , который

  • ищет, чтобы проверить, чтоесть одиночный пользователь с таким адресом электронной почты (и не более одного, что также будет означать обновление потоков регистрации, чтобы гарантировать уникальность адресов электронной почты, плюс, возможно, на всякий случай проверка вашей БД на наличие дубликатов, на всякий случай)
  • получает этого пользователя и разделяет домен его адреса электронной почты, чтобы проверить его по списку / любому из разрешенных доменов, не требующих пароля
  • возвращает пользователя из пользовательского аутентификационного бэкэнда, как если бынормальная проверка пароля была выполнена, хотя она никогда не проверялась с помощью check_password ().Документы Django и различные фрагменты djangosnippets.org показывают, как это сделать.

Кроме того:

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

И, наконец:

  • получить религию, если у вас ее еще нет
  • молиться вашим богам / богам, чтобы никтоеще узнает, что сайт, который разрешит аутентификацию без пароля с адресом электронной почты, и особенно, что они также не получают адреса электронной почты, о которых идет речь, особенно если ваш сайт содержит какие-либо личные данные о третьих лицах или имеетбыть PCI-DSS-совместимым и т. д. и т. д.
  • настоятельно рекомендуем сказать «Нет» своему клиенту / пользователю / менеджеру / кому бы то ни было, по причине, указанной выше .Пароли используются по определенной причине.

Или, наконец, наконец:

  • пропустите все вышеперечисленное и сообщите своему клиенту / пользователю / менеджеру о некоторых различных паролях.инструменты для хранения - например, это и это
1 голос
/ 27 августа 2010

Если у вашего пользователя есть openid с электронной почтой somebody@example.com, тогда вы можете использовать решение OpenId (скажем, Django-openid ; есть и другие).) подтвердить его личность и разрешить ему доступ.

Если это маловероятно, вам нужно найти собственный способ убедиться, что пользователь является тем, кем он себя считает.

0 голосов
/ 27 августа 2010

Примерно так:

if cleaned_data['email'].endswith('@example.com'):
    user = None
    try:
        user = User.objects.get(email = cleaned_data['email'])
    except:
        pass
    if user:
        login(request, user)

Ваша концепция позволяет всем, кто знает или угадывает один из затронутых адресов электронной почты, войти в систему без пароля!

С уважением!

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