繁体   English   中英

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

[英]How you create confirmation link for email?

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

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

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

我使用类似的做法,但有以下区别:

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

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

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

  2. 当用户通过链接确认时,不要只在数据库中查找代码=。 验证密钥,以便任何可能的注入都是可能的。 或者简单地说,如果代码逻辑是数字,那么接收代码应该被验证为数字

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM