在我的项目中,我需要通过确认链接发送给用户电子邮件。 我的解决方案:
您如何为电子邮件创建确认链接?
答案 0 :(得分:6)
我使用类似的做法,但有以下不同之处:
host.com/user/email/{code}/confirm
安全,以便用户必须登录才能验证自己。这确保了更高的安全性。例如,如果用户在注册时键入了错误的电子邮件ID,则该错误的人即使在收到邮件后也不应该验证。code
搜索,而是按id
(当前登录用户的ID)获取用户。UUID.randomUUID().toString()
。此外,这取决于个人选择,但我不使用is_active
标志。相反,我有一个roles
集,我在其中设置了“未完成”角色。这有助于我在使用Spring Security时更轻松地填充用户的权限。另一种方法是检查code
是否为null
。
答案 1 :(得分:1)
抱歉,为时已晚。您可以在链接中使用JWT令牌(例如/ email / {token})关于JWT的好处是您可以在其中签名userID(可以轻松解密,但这不是JWT的重点),但是令牌的签名是使用您的秘密密钥(及其本身的数据)进行加密,因此您可以在后端验证您是否发行了该令牌。另外,您可以在令牌中添加过期时间,以便“链接”在特定持续时间内有效。
答案 2 :(得分:0)
不要将“{code}”保留为1/0或任何可预测的值。让它是随机的(为该用户生成的唯一数字/密钥)
当用户通过链接确认时,不要只在db中查找代码=。验证密钥是否可能进行任何可能的注入。或者简单来说,如果代码逻辑是数字,那么接收代码应该被验证为数字
为了更安全,您还可以确认有效性。如果用户未在该期间内确认,则url无效。