【问题标题】:how to track activation link click from correct email address如何跟踪来自正确电子邮件地址的激活链接点击
【发布时间】:2015-09-16 21:32:59
【问题描述】:

我正在 Laravel 5.1 中创建带有电子邮件激活链接的用户注册页面。 我将激活链接发送到输入的正确电子邮件地址。如何找到激活 链接是点击我发送邮件的正确电子邮件地址

【问题讨论】:

  • 如果您要问的是如何确保从预期的电子邮件帐户而不是从另一个电子邮件地址单击激活链接,那么您不知道这是如何工作的。如果您向我发送电子邮件,只要您确实复制了另一个人,只有我会收到电子邮件,并且只有我知道内容。看来您不了解电子邮件的工作原理
  • @mr.digitlimit 我知道电子邮件是如何工作的。

标签: email laravel


【解决方案1】:

让您了解它是如何工作的:

  1. 当用户注册时,为新用户生成每个用户唯一的令牌(例如 60be22f4-e849-4676-b64b-c3493e8709e0)
  2. 将此唯一令牌与用户名和密码一起保存在您的数据库中
  3. 将此唯一令牌与您的激活电子邮件一起发送(例如,作为链接:http://my-domain.com/user/confirm/60be22f4-e849-4676-b64b-c3493e8709e0
  4. 当用户单击此链接时,在您的用户表中搜索唯一 ID 并将此用户标记为活动/已确认。

【讨论】:

    【解决方案2】:

    有一个非常简单的方法:

    1. 在您的数据库中为每个用户存储一个“秘密”,这应该在第一次创建时生成,并且在系统中用户的生命周期内不应更改。 Secret 可以是一个简单的字符串,例如 'ajchdu8'

    2. 设置一个包含用户 ID 及其“激活签名”的激活路径,如 http://yourdomain.com/activate/{user_id}/{signature}

    3. 创建用于生成和比较这些签名的机制,并使用每个用户的秘密作为使用户只有该用户可以激活他们的帐户(或者无论如何你将 URL 提供给谁)的一种方式

    签名基本上只是我们知道的关于用户的事物的哈希值,但不会在数据库中更改,因此它可能只是用户 ID 及其秘密的哈希值,然后通过在链接中提供用户 ID,您可以通过 id 在数据库中查找用户以获取他们的秘密以及验证签名所需的任何其他详细信息。

    【讨论】:

    • 我已经在 laravel 5 中使用了这个方法。我需要阻止用户提供电子邮件地址并且他们只点击该邮件 ID。
    • @user1959811 你在说什么?如果您向用户发送电子邮件,则此电子邮件对于该用户是唯一的,如果用户收到邮件,他只需单击以确认电子邮件地址属于他
    • 以防万一,该用户将邮件转发到其他邮件地址并从该邮件地址也单击。我们如何防止该事件?例如,我将激活链接发送到地址 A,但用户将我的链接转发到地址 B 并从地址 B 点击。我们必须防止这种情况,并检查用户必须单独从地址 A 而非地址 B 进行点击
    • @user1959811 如果用户共享一封为他们准备的电子邮件,那么您实际上是在要求不可能,那么无论如何该链接都将起作用。你不应该试图解决这个问题,否则你会惹恼用户,很多人有多个电子邮件帐户并在帐户之间转发他们的电子邮件,即使这种机制可以用于检查电子邮件链接的来源,它也会阻止使用别名电子邮件的用户帐户
    猜你喜欢
    • 1970-01-01
    • 2017-09-24
    • 2013-03-06
    • 2014-02-22
    • 2020-06-25
    • 1970-01-01
    • 2023-03-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多