Laravelでパスワードが正しかを比較する

概要

Laravelでパスワードが正しかを比較する

詳細

Laravelでパスワードの整合性を確かめるために、以下のことを行った。

  • 現在DBに保存されているpasswordを取得(これはHashされている)
  • 入力されたパスワードをDBにパスワードを格納させる際のHash関数でHashする
  • 上記2つのHashされたパスワードを比較する

これで、パスワードの比較はできると思っていた。 ちなみに、DBにパスワードを入れる際は、EloquentのAccessorを利用して、その中でHashしている。

public function setPasswordAttribute($pass)
{
    $this->attributes['password'] = Hash::make($pass);
}

しかし、Hash::make()でHashした値は時々刻々と変わるため、 同じHash関数だから両者の比較は正しくなるだろうというものは成り立たない。

では、Hash値の比較はどのようにすればよいかというと、Hash::check()を利用すると期待通りの結果を得ることができた。

if (Hash::check('plain-text', $hashedPassword)) {
    // パスワード一致
}

参考

https://readouble.com/laravel/5.3/ja/hashing.html