devise_token_auth,bcrypt检查令牌上的相等性

时间:2015-06-01 10:09:28

标签: ruby-on-rails gem token bcrypt

我使用devise_token_auth Gem来构建公共API。 要销毁会话(sign_out),我必须发送:uid(mail),client_id和access-token(与此client_id相关联)

devise_token_auth gem 中的此方法会检查令牌是否仍然可用,以及它是否有效。 Github code

def token_is_current?(token, client_id)
# ghetto HashWithIndifferentAccess
expiry     = self.tokens[client_id]['expiry'] || self.tokens[client_id][:expiry]
token_hash = self.tokens[client_id]['token'] || self.tokens[client_id][:token]

return true if (
  # ensure that expiry and token are set
  expiry and token and

  # ensure that the token has not yet expired
  DateTime.strptime(expiry.to_s, '%s') > Time.now and

  # ensure that the token is valid
  BCrypt::Password.new(token_hash) == token
)

我对此行BCrypt::Password.new(token_hash) == token

有一些问题

我所知道的是:

  • token_hash是从DB
  • 中提取的令牌
  • 令牌来自请求的标头
  • 该行正在使用bcrypt" =="比较方法,即

    def ==(秘密);       super(BCrypt :: Engine.hash_secret(secret,@ salt));     端

由于它使用此方法来检查相等性,因此除非我明确检查字符串值,否则检查不会通过。

为什么使用Bcrypt来比较两个令牌,而不是简单地比较两个字符串。 读这个:bcrypt ruby doc 我理解使用bcrypt作为密码的问题,但为什么要使用令牌?

0 个答案:

没有答案