This question may be a little abstract, but I was wondering what the best/standard method for implementing password recovery is. I am trying to implement it in my code right now but the method I'm starting to use seems a little roundabout / confusing and I wanted to know what the "Rails way" to do this is. Any suggestions?
1 に答える
6
通常、パスワードは暗号化するのではなく (理想的にはソルトを使用して) ハッシュする必要があるため、パスワードを解読することはできません。次に、ユーザーがパスワードを正しく入力したかどうかを確認するために、入力したものをすべて取得し、同じソルトとハッシュ関数を使用して、データベースにあるハッシュと一致するかどうかを確認します。
この方法で保存されたパスワードは復元できません。紛失したパスワードを回復する標準的な方法は次のとおりです。
- ボブは自分のメールアドレス(またはユーザー名など)を入力して、自分が誰であるかを示します
- 「パスワード リセット トークン」が生成され、通常は文字と数字の長い文字列であり、何らかの方法で Bob に関連付けられたデータベースに格納されます。
- Bob には、何らかの方法でパスワード リセット トークンが添付された電子メールが送信されます。通常は URL (
http://fakesite.com/reset_password?token=long_token_generated_in_step_2
. - Bob がその URL にアクセスすると、サイトはリセット トークンが有効であることを確認し、Bob が新しいパスワードを選択できるようにします。新しいパスワードは、彼が失ったパスワードと同じ方法でソルト化/ハッシュ化されます。
Rails の認証ジェムである Devise には、このパターンに従った回復可能な戦略があります。
電子メールは 100% 安全ではないため、一部のサイトでは追加のセキュリティ チェックが適用されます。たとえば、パスワード リセットのメールを受け取るには、ユーザーが秘密の質問 (通常はアカウントの作成時に設定) に答える必要があるようにすることができます。
于 2012-01-04T00:56:23.590 に答える