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