Могу ли я создать автоматический вход в django, используя секрет в URL? - PullRequest
0 голосов
/ 10 февраля 2010

Как я могу позволить пользователям войти на мой сайт Django, просто нажав на ссылку?

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

Я видел это на других сайтах (например, Squarespace), но кто-нибудь делал это раньше с Django?

Ответы [ 3 ]

3 голосов
/ 10 февраля 2010

Я бы не советовал пытаться войти в систему через URL. URL-адрес не зашифрован (если только вы не используете HTTPS и даже если его еще можно удалить), и его легко перехватить или просто угадать грубой силой.

Существует два возможных решения:

Использование сессий и файлов cookie Django

Воспользуйтесь тем, что в Django логин автоматически сохраняет куки. После того как пользователь вошел в систему, он остается в системе до тех пор, пока не выйдет из системы (или не истечет срок действия файла cookie, но его можно настроить на вечную работу). Затем все, что вам нужно сделать, это создать URL-адрес /myprofile/ и просто отправить туда пользователей. Если пользователь вошел в систему, то здесь вы показываете его профиль.

Кодирование с помощью хэша

Однако, если вы действительно хотите передать URL с именем пользователя и паролем, я бы рекомендовал скрыть их имя пользователя и пароль в виде хэша MD5, который затем можно передать через URL.

import urllib, hexlib

username = 'joeblow'
password = 'password'

url = 'http://www.mysite.com/users/login/'
url += urllib.urlencode({
        'username':hashlib.md5(username.lower()).hexdigest(),
        'password':hashlib.md5(password.lower()).hexdigest(),
    })
# return the url to the user in the email template
return url

Примечание: я все равно настоятельно рекомендую вариант 1!

2 голосов
/ 10 февраля 2010

Просто войдите в них в представлении. Вам придется компенсировать отсутствие вызова authenticate(), но вы можете просто посмотреть на источник и выяснить, что нужно делать.

1 голос
/ 01 февраля 2011

А как насчет идеи автоматического входа в систему на основе токенов ? Это не связано с отправкой имени пользователя или пароля на электронную почту пользователя. Вы просто отправляете целочисленное значение, соответствующее токену безопасности на сервере, срок действия которого истекает через несколько часов.

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