Использование токенов в Django для валидации URL-адресов
Мне нужно отправить посетителям (не зарегистрированным пользователям) по электронной почте ссылку для просмотра страницы на моем сайте. Страница будет иметь ID, который соответствует определенной записи в базе данных. Однако я хотел бы убедиться, что пользователи действительно получили ссылку по электронной почте, а не просто вручную ввели идентификатор базы данных. Для этого добавление маркера в URL кажется хорошим способом. Если не нужно, я предпочитаю НЕ хранить дополнительную информацию (маркер) в базе данных, а использовать существующий ID для создания маркера (используя что-то вроде соли), и повторно генерировать маркер на основе ID и проверять, действителен ли он.
Мой вопрос: какой хороший способ сгенерировать этот токен в Django? Хорошая ли это идея использовать функцию make_password? Или использовать, скажем, SHA1 шифрование строки? Какие компромиссы я должен принять во внимание, и есть ли конкретный маршрут, который был бы предпочтительным для этой ситуации?
Вам нужно будет хранить TOKEN, который вы создадите в результате шифрования ID, потому что у системы не будет способа найти ID, соответствующий TOKEN, когда будет загружена ссылка в электронном письме.
Единственным способом найти ID, соответствующий токену, будет перебор хэшей каждого ID при загрузке представления и сравнение токенов для нахождения соответствующего. Это совсем не эффективно.
Зашифрованный TOKEN, который вы создадите для ID, всегда будет одинаковым, так что это своего рода безопасный способ предотвращения нежелательных посетителей без аутентификации.
BTW, у меня действительно есть подобный метод в одной из моих систем. TOKEN должен быть сохранен.