Laravel новый пароль не сохраняется в базе данных при использовании `logoutOtherDevices` - PullRequest
0 голосов
/ 22 апреля 2020

Я пытаюсь создать форму обновления пароля в 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!']);
}

1 Ответ

0 голосов
/ 22 апреля 2020

Комментируя logoutOutOtherDevices и новый пароль сохраняется в базе данных. Laravel предоставляет мало информации о том, как использовать функцию, кроме необходимости запрашивать текущий пароль. Поскольку порядок операций был обновлен, а затем выход из системы на других устройствах, необходимо было добавить новый пароль вместо предыдущего.

Auth::logoutOtherDevices($request->password); // i.e. the current (new) password

Это связано с этой строкой кода в logoutOtherDevices():

    $result = tap($this->user()->forceFill([
        $attribute => Hash::make($password),
    ]))->save();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...