2

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

  1. 使用共享链接生成唯一令牌并将其附加到链接
  2. 当共享链接的用户单击链接时,将检查唯一令牌并验证相应用户。

但是,这种方法存在缺陷。如果其他用户在浏览器中复制并粘贴相同的链接,或者原始收件人将邮件转发给其他人,则其他用户将被验证为链接的原始收件人。克服这些缺陷的方法应该是什么?我真正想要的是:

  1. 链接应仅在从电子邮件中单击时对用户进行身份验证,并且不应允许直接访问。
  2. 仅当从最初发送链接的电子邮件中单击链接时,才能对用户进行身份验证。

我读过一些要求有些相似但不完全相同的问题。此外,对他们的回应导致得出的结论是这是不可能的。真的吗 ?

4

1 回答 1

4

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

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

你可以:

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