我想实现一个系统,在用户注册后,用户将收到一封电子邮件,其中包含一个链接以验证该电子邮件是否适用于该用户。
我生成用于验证电子邮件的令牌的方式是这样的:
import (
"crypto/rand"
"encoding/base64"
)
func generateToken() (string, error) {
b := make([]byte, 35)
_, err := rand.Read(b)
if err != nil {
return "", err
}
return base64.URLEncoding.EncodeToString(b), nil
}
Run Code Online (Sandbox Code Playgroud)
但是我想问的是这个方法行不行?如何让这个方法生成的所有token都是唯一的?
实施该系统的常规方法是什么?
请给我一些想法并告诉我这种生成令牌的方法是否好。
谢谢。
查看https://pkg.go.dev/github.com/google/uuid#NewRandom。
您可能需要考虑将其与电子邮件地址和到期日期/时间一起存储在数据库中,以便验证不会永远留在那里。您可能只想允许人们在 24 小时内或 7 天内进行验证,依此类推。有另一份工作,定期清理过期和未经验证的电子邮件。