仅从通过电子邮件单击的链接验证用户

时间:2012-12-08 11:43:54

标签: php authentication symfony

我有一个使用Symfony2构建的Web应用程序,其中一些项目与其他用户共享。共享项目时,用户会收到指向该项目的链接。我希望收到链接的用户在点击电子邮件时,会自动获得对网站的身份验证。到目前为止,我所做的是:

  1. 使用共享链接生成唯一标记并将其附加到链接
  2. 当共享该链接的用户点击该链接时,将检查该唯一令牌并对相应的用户进行身份验证。
  3. 然而,这种方法存在缺陷。如果某些其他用户在浏览器中复制并粘贴相同的链接,或者原始收件人将邮件转发给其他人,则另一个用户将被验证为该链接的原始收件人。如何克服这些缺陷?我真正想要的是:

    1. 链接应该只对用户进行身份验证,当从电子邮件中点击时,不允许直接访问。
    2. 只有在最初发送的电子邮件中点击链接时,才会对用户进行身份验证。
    3. 我已经阅读了一些在要求方面有些相似的问题,但并不完全相同。此外,对他们的回应得出结论,这是不可能的。真的吗?

1 个答案:

答案 0 :(得分:4)

不幸的是,在这种情况下你无能为力。

您可以检查推荐人,但正如用户Cthulhu指出的那样,这样的检查会不可靠并且容易出错。

你可以:

  1. 确保相关令牌对其用户帐户是唯一的。即没有两个用户可以拥有相同的令牌。
  2. 将他们的用户ID添加到链接中,以便您可以针对特定用户帐户验证令牌(而不是对数据库中的所有令牌进行全面搜索)。
  3. 为令牌添加到期日期,以便如果有人在一个月后点击令牌,它将不再有效。
  4. 点击链接并验证其电子邮件地址/帐户后,立即停用令牌。这可确保永远不会重复使用令牌。