在内部,我的网站将用户存储在由整数主键索引的数据库中。
但是,我想将用户与许多独特的、难以猜测的标识符相关联,每个标识符将在各种情况下使用。例子:
- 一个用于用户配置文件 URL:因此可以通过不包含其实际主键的 URL 找到和显示用户,从而防止配置文件被抓取。
- 一个用于无登录电子邮件退订表单:因此用户可以通过单击电子邮件中的链接来更改他们的电子邮件首选项,而无需登录,从而防止其他人能够轻松猜测 URL 并篡改他们的电子邮件首选项。
正如我所看到的,我需要这些标识符的关键特征是它们不容易被猜到,它们是唯一的,并且知道密钥或标识符不会很容易找到另一个。
有鉴于此,我正在考虑在创建新用户时使用SecureRandom::urlsafe_base64生成多个随机标识符,一个用于每个目的。由于它们是随机的,因此我需要在插入之前进行数据库检查以保证唯一性。
任何人都可以提供健全性检查并确认这是一种合理的方法吗?