2016-05-24 8 views
0

私は過去3か月間に使用したのと同じパスワードをユーザが使用しないようにしたいと考えています。symfony(bcrypt)で同じパスワードを使用できないようにする

私の最初のアプローチは、各ユーザーのパスワード履歴を保存するためのテーブルを作成することでしたが、SymfonyはBcryptを使用してパスワードをエンコードし、毎回違う方法でハッシュします。 。

UserInterfaceを実装していないエンティティに対してIsPasswordValidを実行する方法はありますか?だから私は新しいパスワードが保存されたパスワードごとに真を返すかどうかを確認することができます...

また、他のアイデアを歓迎します。

私はSymfony 3.0.6を使用していますが、FOS_User_Bundleを使用するつもりはありません。私は既にそれを動作させる方法を知っています。

ありがとうございました。

+2

その時のパスワード履歴の各エントリに保存されているハッシュに対して[password_verify()](http://www.php.net/manual/en/function.password-verify.php)を実行します期間 –

答えて

2

入力した新しいパスワードが、保存した過去のxパスワードと一致するかどうかを確認するには、password_verify()を使用します。

非常に簡単な例です。基本的に

$oldPassword = password_hash('password', PASSWORD_DEFAULT); 
$newPassword = 'password'; 

if (password_verify($newPassword, $oldPassword)) { 
    echo 'Previously used password, please choose another'; 
} 

あなただけのデータを介してユーザの古いパスワード、およびループを引き出した後、任意の一致かどうかを確認するために、古いもののそれぞれに対してpassword_verifyを使用する必要があります - 彼らは、その後行う場合は、彼らがきた知っています以前に保存したパスワードを使用しました。

もう少し進んで類似性チェックをしたい場合は、すべての順列を自分で生成してから、すべての順列に対して古いパスワードのパスワード検証を使用して同じルーチンを実行する必要があります。

+0

ちょっとしたチューニングで魅力的に仕上がりました!ありがとう! – Kynethix

関連する問題