【问题标题】:How you create confirmation link for email?您如何为电子邮件创建确认链接?
【发布时间】:2015-11-12 05:39:42
【问题描述】:

在我的项目中,我需要向用户电子邮件发送带有确认链接的信函。 我的解决方案:

  1. 将字符串列“code”和布尔列“is_active”(默认值为false)添加到用户表。
  2. 当用户注册时,生成唯一的字符串键并保存到数据库。发送到电子邮件链接,例如 host.com/user/email/{code}/confirm
  3. 然后通过代码(生成的字符串值)查找用户并设置标志“is_active” - true。
  4. 清除“代码”列的值。

您如何为电子邮件创建确认链接?

【问题讨论】:

    标签: java database spring email


    【解决方案1】:
    1. 不要将“{code}”保留为 1/0 或任何可预测的值。让它成为一个随机的(为该用户生成的唯一数字/密钥)

    2. 当用户通过链接确认时,不要像 where code= 一样在 db 中查找。验证密钥,这样任何可能的注入都是可能的。或者简单来说,如果代码逻辑是数字,那么接收代码应该被验证为数字

    3. 为了提高安全性,您还可以为确认设置有效性。如果用户在此期间未确认,则 url 无效。

    【讨论】:

      【解决方案2】:

      我使用类似的做法,但有以下不同:

      1. 我会设置 URL,即host.com/user/email/{code}/confirm 安全,这样用户必须登录才能验证自己。这确保了更多的安全性。例如,如果用户在注册时输入了错误的电子邮件 ID,那么即使在收到邮件后,该错误的人也应该无法验证。
      2. 我不会通过code 搜索,而是通过id(当前登录用户的ID)获取用户。
      3. 对于代码,我使用UUID.randomUUID().toString()

      另外,这取决于个人选择,但我不使用is_active 标志。相反,我有一个roles 集,我在其中放置了“未验证”角色。这有助于我在使用 Spring Security 时更轻松地填充用户的权限。另一种方法是检查code 是否为null

      【讨论】:

      • 嘿 @Sanjay 不确定如果尚未创建帐户,您如何要求用户登录并搜索 id 而不是代码。提前致谢
      【解决方案3】:

      抱歉,如果为时已晚。您可以在链接中使用JWT 令牌(例如 /email/{token})JWT 的好处是您可以在其中签署用户 ID(可以轻松解密,但这不是 JWT 的重点),但令牌的签名使用加密您的密钥(及其自身的数据),以便您可以在后端验证该令牌是否由您发出。此外,您可以为您的令牌添加过期时间,以便“链接”在一定时间内有效。

      【讨论】:

        猜你喜欢
        • 2012-01-23
        • 2011-03-18
        • 1970-01-01
        • 2011-05-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-12-14
        相关资源
        最近更新 更多