Rails/Deviseセッションの監視データは何から構成されていますか? 質問する

Rails/Deviseセッションの監視データは何から構成されていますか? 質問する

Rails セッション内の「データ」は次のようになります。

{"warden.user.user.key" => [[1], "long-random-string"]}

1 はユーザー ID です。長いランダム文字列は何ですか?

これは Rails または Devise によって処理/使用されるものなのでしょうか?

ベストアンサー1

user(デバイス モデル名)にログインするとUser、キー"warden.user.model_name.key"が作成されます。この場合は です"warden.user.user.key"

例えば:

{ warden.user.user.key => [[1], "$2a$10$KItas1NKsvunK0O5w9ioWu"] }

どこ

1idログインしているユーザーの です。

$2a$10$KItas1NKsvunK0O5w9ioWu別名long-random-string部分的に暗号化されたパスワードID のユーザーの1

これを検証するにはrails console

User.find(1).encrypted_password  
## => "$2a$10$KItas1NKsvunK0O5w9ioWuWp4wbZ4iympYMqVCRmmvTGapktKqdMe"

アップデート

この部分的に暗号化されたパスワードについてもう少し詳しく教えていただけますか? なぜ完全ではなく部分的に暗号化されているのですか?

コメントで上記の質問に答えると、メソッドを呼び出してセッションにDevise部分を保存します。セッションで完全なencrypted_pa​​sswordを公開するよりも信頼性が高いため、部分を保存します(暗号化されていても)。そのため、最初の30文字が抽出され、セッションに保存されます。encrypted_passwordauthenticatable_saltDeviseencrypted_password[0,29]encrypted_password

  # A reliable way to expose the salt regardless of the implementation.
  def authenticatable_salt
    encrypted_password[0,29] if encrypted_password
  end

コードを見ることができます認証可能なソルトここ。

どこで、いつ使用されますか? Devise で使用されますか、それとも Rails で使用されますか、それとも両方で使用されますか?

これは、特定のユーザーがログインしているかどうかを確認するための認証目的で使用されますDevise。理想的な使用例は、新しいページが要求されたときに、特定の Rails アプリケーションがユーザーのログイン状態を追跡する方法です。HTTP 要求はステートレスであるため、特定の要求が実際にログインしている特定のユーザーから送信されたかどうかを判断することは不可能です。セッションが重要である理由は、セッションが期限切れになるまで、アプリケーションが 1 つの要求から次の要求までログインしているユーザーを追跡できるようにするためです。

おすすめ記事