1

トークン認証でDeviseを使用していますが、データベースでトークンを暗号化したいと考えています。DBからのトークンの保存/取得を工夫するヒントを誰か教えてもらえますか?

私は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 の thx)

誰かが同様の問題を抱えていて、解決策を知っているのではないでしょうか?

4

2 に答える 2

0

Token Authenticable 戦略に関する重要な部分はDevise::Models:: TokenAuthenticatableモジュールにあります- それは一連の単純なメソッドで動作します:

  • find_for_token_authenticationリソースの認証に使用されます
  • ensure_authentication_token/ensure_authentication_token!は、新しいリソースのトークンを生成するために使用する必要があります。Devise はそれ自体を呼び出しません。

gem が AR モデルと互換性がある場合、attr_encryptedDevise で問題はないと思いますが、それを確認する最善の方法は試してみることです。

于 2013-03-21T15:17:41.167 に答える
0

User モデルでの方法は次のとおりです。

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 に答える