1

在我的 Rails 应用程序中,我在User模型中使用此方法生成令牌:

def generate_token(column)
  update_column(column, SecureRandom.urlsafe_base64)
end

我知道这极不可能发生,但我怎样才能确保没有两个代币被创建为具有相同的价值?

4

2 回答 2

3

我认为您的意思是要确保令牌是唯一的?

添加一个实例方法来执行此操作:

def generate_token
  begin
    self.token = SecureRandom.urlsafe_base64
  end while User.exists?(token: token)
end

为了完整起见,正如其他人指出的那样,这并不能绝对保证唯一性。唯一确定的方法是在数据库级别添加唯一约束:

add_index :people, :token, unique: true
于 2013-08-16T23:13:50.917 回答
1

我也会添加一个数据库约束来确定:

add_index :people, :token, :unique => true
于 2013-08-18T04:25:16.453 回答