确认电子邮件链接提交ID的最佳方式

Sam*_*Sam 1 email confirmation

我有一个网站向某人发送确认电子邮件.

现在在电子邮件中我希望有一个链接,用户必须单击以确认他收到了邮件.

我想将用户的密码(或一些随机代码)包含在确认地址中,因此用户无需再次手动输入密码,但如果我这样做,密码将最终显示在浏览器历史记录中日志文件.

有没有其他方法可以在电子邮件中获取确认链接,以发送用户名和密码等信息,而不会以某种方式在链接中结束?
例如,是否可以在电子邮件中输入输入表单并将密码作为POST而不是GET发送?

Joh*_*ley 6

通常的方式是确认电子邮件包含一个包含某种GUID(全球唯一标识符)的链接.GUID与用户的帐户相关联.单击链接时,Web应用程序只需设置确认标志并使用GUID而不是通常的用户名和密码组合来记录用户.


小智 5

根据用户的id和当前时间计算十六进制摘要(例如md5).将此代码保留到数据库或使用它作为文件名编写文件,并包含用户的ID和电子邮件地址.

设置一个http处理程序(cgi,php,servlet等...),以根据看起来像"/ confirm_email/{hexdigest}"或"/confirm_email.php?code={hexdigest}"的URI接收GET请求.

当用户需要确认其电子邮件时,请发送包含摘要的上述servlet的链接.

当有人链接到此URI时,使用匹配的摘要检索db记录或文件.如果找到,则现在验证包含的电子邮件地址.

如果你想让它更健壮:当用户验证他们的电子邮件时,将十六进制摘要更改为电子邮件地址本身的哈希,不含盐.然后,您可以测试某人的电子邮件是否已更改并需要重新验证.