0 レビュー
2 回答
php-$ user-> save()が失敗した場合、Laravelでのパスワードのリセットをキャンセルします
ReminderコントローラーのデフォルトのpostReset()アクションには、パスワードをリセットするための次のコードがあります。
$response = Password::reset($credentials, function($user, $password)
{
$user->password = Hash::make($password);
$user->save();
});
保存方法が失敗した場合(何らかの理由で)リセットをキャンセルする条件を追加したい。私のモデルはsaving()イベントでvalidate関数を呼び出すため、フィールドが検証されない場合、$ user-> save()はfalseを返します。
コードを次のように変更しました:
$response = Password::reset($credentials, function($user, $password)
{
$user->password = $password;
# validate before password hashing
if(!$user->validate()) {
Redirect::back()->with('error', 'Validator failed');
return false;
}
# hash password and try to save
$user->password = Hash::make($password);
if(!$user->save()) {
Redirect::back()->with('error', 'Validator failed');
return false;
}
});
if (!$response) {
return Redirect::back()->with('error', 'Validator failed');
}
しかし、クロージャーの戻りは$ response変数に影響を与えないことがわかります...それで、これを行う方法について何かアイデアはありますか?
わからない
0
レビュー
答え :
解決策:
ユーザーの保存は、検証されることを意味するわけではありません(もちろん、バニラLaravelを使用している場合)。保存する前にユーザーを手作業で検証し、保存の失敗ではなく、検証の失敗でエラーが発生してリダイレクトする必要があります。 I.e。次のようなコードを使用する必要があります:
if($validator->fails() || !$user->save())
{
return Redirect::back()->with('error', 'Failed to save');
}
ここで、 $validator
はルールを使用したValidatorのインスタンスです。
わからない
0
レビュー
答え :
解決策:
neoasceticのコメントに従って、例外をスローすることでこれを解決することができました:
try {
$response = Password::reset($credentials, function($user, $password)
{
$user->password = Hash::make($password);
if(!$user->save()) {
# throw exception if save fails
throw new Exception(Password::INVALID_PASSWORD);
}
});
} catch ( Exception $e) {
$response = Password::INVALID_PASSWORD;
}
わからない
同様の質問
私たちのウェブサイトで同様の質問で答えを見つけてください。