Я пытаюсь создать форму обновления пароля в Laravel 7, т. Е. Форму, которая в данный момент вошла в систему, пользователи могут использовать для смены пароля.
Я использую пакет аутентификации laravel по умолчанию, просто опираясь на него.
Моя функция обновления, похоже, не сохраняет новый пароль пользователя в базе данных. Я подтвердил, что мой новый / старый пароль отличается. После отправки формы я все еще могу войти со своим старым паролем, и новый пароль не работает. Нет ошибок (и у меня включен режим разработки). База данных получает новую временную метку, а га sh меняется.
/**
* Update current user's password
* @param Request $request
* @return JsonResponse
*/
public function updatePassword(Request $request)
{
$validator = Validator::make($request->only(['current_password', 'password', 'password_confirmation']), [
'current_password' => ['required'],
'password' => ['required', 'string', 'min:10', 'confirmed']
]);
$user = User::findOrFail(Auth::user()->id);
$validator->after(function ($validator) use ($request, $user) {
if (!Hash::check($request->current_password, $user->password)) {
$validator->errors()->add('current_password', 'The current value does not match our records.');
}
})->validate();
//echo 'current password: '. $request->current_password . '<br>';
//echo 'new password: ' . $request->password . '<br>';
$currentPassword = $request->current_password;
$user->password = Hash::make($request->password);
$user->setRememberToken(Str::random(60));
$user->save();
Auth::logoutOtherDevices($currentPassword);
return response()->json(['success' => true, 'msg' => 'Password updated!']);
}