私は、パスワードリセットの問題をDatabaseTokenRepository内のハッシャーメソッドに戻して追跡しました。Laravel - Hasher/Reset password issue
2つのトークンハッシュ(ユーザーからのリセット要求とデータベースからのトークンハッシュ)を比較すると、何があっても失敗します。私は明らかにデータベースからの貼り付けをコピーして、2つの文字列をそのように比較しようとしましたが、まだfalseを返します。
私はLaravel 調理人機能の5.4
ユーザーのトークン(リセットのメールより)
"$2y$10$xAnDTr6/G41sAROp4h76hOhx7c4Ily4eYBtFc1J4voCgwIRhq9Mge"
データベーストークン
"$2y$10$xAnDTr6/G41sAROp4h76hOhx7c4Ily4eYBtFc1J4voCgwIRhq9Mge"
リターンはまだあるを使用しています偽。
DatabaseTokenRepository
public function exists(CanResetPasswordContract $user, $token)
{
$record = (array) $this->getTable()->where(
'email', $user->getEmailForPasswordReset()
)->first();
//dump($token);
//dump($record['token']);
//dd($this->hasher->check($token, $record['token']));
return $record &&
! $this->tokenExpired($record['created_at']) &&
$this->hasher->check($token, $record['token']);
}
編集からコード:これはソースファイルであるので、真hash_equals($token, $record['token']);
リターンを使用して は、しかし、それは(解決策ではなく、これらのファイルへの更新は、私を破ります関数)
あなたのトークンがあなたが供給しているものだと言うとき。本当?それはすでにハッシュされています。 – apokryfos
これはハッシュされているはずです。Laravelがパスワードのリセットを処理する方法です。 '/ password/reset/{token}'のようなGETルートでハッシュされた文字列を使用し、それがデータベース内の同じハッシュであることを確認してパスワードを変更できるようにする - しかし、password_verifyを使ってハッシュを比較するので失敗します(ハッシュされていない値が期待されるため)。これは私がソースファイルを変更することなく回避したいものです。 @apokryfos – Classified
いいえ、そうではありません。 '$ hasher-> check'は内部的に[' password_verify'](http://php.net/manual/en/function.password-verify.php)を使用し、最初のパラメータとしてunhashed値を受け取り、それをハッシュと比較します。実際のハッシュをユーザーに送信している場合は、何もハッシュするのには意味がありません。 – apokryfos