1

我正在使用带有令牌身份验证的设计,现在,我想加密数据库中的令牌。谁能给我一个提示,在哪里设计从数据库存储/检索令牌?

我还使用了attr_encrypted gem,一旦找到正确的位置,整个加密应该相当容易。

编辑:

我已经像这里描述的那样实现了令牌身份验证:http: //zyphdesignco.com/blog/simple-auth-token-example-with-devise

我在用户模型中添加了以下行,它应该加密 authentication_token

attr_encrypted :authentication_token, :key => 'a secret key', :attribute => 'authentication_token'

当我运行它并尝试登录时,我收到以下错误消息:

Completed 500 Internal Server Error in 364ms

SystemStackError - stack level too deep:
(gem) actionpack-3.2.13/lib/action_dispatch/middleware/reloader.rb:70:in `'

似乎与 devise 和 attr_encrypted 存在冲突,并且两者都在为重新定义 authentication_token 方法而战(感谢@sbfaulkner 的提示)

也许有人有类似的问题并且知道解决方案?

4

2 回答 2

0

关于 Token Authenticable 策略的重要部分在Devise::Models:: TokenAuthenticatable模块中- 它使用一组简单的方法:

  • 用于find_for_token_authentication验证资源
  • ensure_authentication_token/ensure_authentication_token!应该用于为新资源生成令牌 - Devise 不会自行调用它。

如果attr_encryptedgem 与 A​​R 模型兼容,那么我相信您不会对 Devise 有任何问题,但确保这一点的最佳方法是尝试一下。

于 2013-03-21T15:17:41.167 回答
0

在我的用户模型上,这是我的做法:

before_save :ensure_authentication_token

attr_encrypted :authentication_token, :key => 'my key'

def ensure_authentication_token
  if authentication_token.blank?
    self.authentication_token = generate_authentication_token
  end
end

private

def generate_authentication_token
  loop do
    token = User.encrypt_authentication_token(Devise.friendly_token)
    break token unless User.where(encrypted_authentication_token: token).first
  end
end

秘密就在这个方法中:encrypt_authentication_tokenattr_encrypted 创建。

于 2015-05-18T12:45:28.060 回答