3

我正在建立一个人们报名参加狗训练课程的网站。客户希望通过电子邮件确认链接自动为当前课程中的人员注册即将举行的课程。

我希望他们能够做到这一点,而无需登录到该站点。因此,所有相关信息都需要包含在生成的链接本身中。理想情况下,该链接会以某种方式加扰,这样来自机器人的随机请求就不会搞砸。

是否存在人们用来执行此操作的现有应用程序/约定?

4

1 回答 1

3

当您在后端创建和发送电子邮件时,您可以为用户生成一个带时间戳的令牌(基本上是用户状态的哈希)。在 URL 中编码该令牌和用户的 UID,然后在访问链接时在您的注册视图中检查其有效性。散列用户状态保证(出于所有实际目的)您不会遇到机器人随机生成任何正确 URL 的任何问题。

内置的密码重置视图contrib.auth基本上就是做这件事。发送给用户的重置电子邮件中的 URL 末尾有两个参数 - base-64 编码的 UID 和生成的令牌。生成令牌的来源在这里:https ://github.com/django/django/blob/master/django/contrib/auth/tokens.py ,相关视图password_reset_confirmhttps://github.com/django /django/blob/master/django/contrib/auth/views.py

您可能会为您的应用程序实现非常相似的东西,但您必须小心如何生成令牌。在contrib.auth令牌生成器中,它们对用户的整个内部状态进行哈希处理,包括密码哈希,这保证了链接只会有效一次,因为密码哈希将在用户重置密码后更改。如果要确保链接仅有效一次,则必须在哈希中包含一些保证会更改的其他状态。

于 2014-05-27T19:12:00.297 回答