为了账号安全,请及时绑定邮箱和手机立即绑定

在Rails中创建唯一令牌的最佳方法?

在Rails中创建唯一令牌的最佳方法?

翻阅古今 2020-02-03 15:05:16
这就是我正在使用的。令牌不必一定要猜测,它更像是一个简短的url标识符,而不是其他任何东西,我想使其简短。我遵循了一些我在网上找到的示例,如果发生碰撞,我认为下面的代码将重新创建令牌,但是我不确定。不过,我很好奇看到更好的建议,因为这样的感觉有些粗糙。def self.create_token    random_number = SecureRandom.hex(3)    "1X#{random_number}"    while Tracker.find_by_token("1X#{random_number}") != nil      random_number = SecureRandom.hex(3)      "1X#{random_number}"    end    "1X#{random_number}"  end我的令牌数据库列是唯一索引,我也在validates_uniqueness_of :token模型上使用它,但是因为这些是根据用户在应用程序中的操作自动创建的(它们实际上是下订单并购买令牌)而批量创建,所以让应用抛出错误是不可行的。我想,我也可以减少冲突的机会,在末尾附加另一个字符串,这些字符串是基于时间生成的,或者类似的东西,但是我不希望令牌太长。
查看完整描述

3 回答

?
白衣染霜花

TA贡献1796条经验 获得超10个赞

这可能是一个较晚的响应,但是为了避免使用循环,您还可以递归调用该方法。它看起来和感觉对我来说都比较干净。


class ModelName < ActiveRecord::Base


  before_create :generate_token


  protected


  def generate_token

    self.token = SecureRandom.urlsafe_base64

    generate_token if ModelName.exists?(token: self.token)

  end


end


查看完整回答
反对 回复 2020-02-03
  • 3 回答
  • 0 关注
  • 657 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信