在我的Rails应用程序中,我使用此方法在User
模型中生成标记:
def generate_token(column)
update_column(column, SecureRandom.urlsafe_base64)
end
我知道这种情况极不可能发生,但我怎样才能确保不会创建具有相同值的两个令牌?
答案 0 :(得分:3)
我认为你的意思是你想确保令牌是唯一的吗?
添加实例方法来执行此操作:
def generate_token
begin
self.token = SecureRandom.urlsafe_base64
end while User.exists?(token: token)
end
为了完整起见,正如其他人所指出的那样,这不会绝对保证唯一性。唯一可靠的方法是在数据库级别添加唯一约束:
add_index :people, :token, unique: true
答案 1 :(得分:1)
我还要添加一个数据库约束来确定:
add_index :people, :token, :unique => true