我使用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
我所知道的是:
该行正在使用bcrypt" =="比较方法,即
def ==(秘密); super(BCrypt :: Engine.hash_secret(secret,@ salt)); 端
由于它使用此方法来检查相等性,因此除非我明确检查字符串值,否则检查不会通过。
为什么使用Bcrypt来比较两个令牌,而不是简单地比较两个字符串。 读这个:bcrypt ruby doc 我理解使用bcrypt作为密码的问题,但为什么要使用令牌?