Метод reset
Метод reset класса Password применяется для завершения процесса сброса пароля.
Он проверяет корректность токена, переданного пользователю по электронной почте,
и обновляет пароль в базе данных. Первым параметром принимается массив с данными
(email, password, password_confirmation, token), вторым - колбэк, который
выполняется после успешного обновления пароля, третьим - опциональный параметр
для указания имени guard.
Синтаксис
<?php
use Illuminate\Support\Facades\Password;
Password::reset($credentials, $callback, $guard = null);
?>
Пример
Давайте выполним сброс пароля для пользователя с email 'user@example.com':
<?php
namespace App\Http\Controllers\Auth;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Password;
use Illuminate\Support\Facades\Hash;
use App\Models\User;
class ResetPasswordController extends Controller
{
public function reset(Request $request)
{
$credentials = [
'email' => $request->input('email'),
'password' => $request->input('password'),
'password_confirmation' => $request->input('password_confirmation'),
'token' => $request->input('token'),
];
$res = Password::reset($credentials, function (User $user, $password) {
$user->password = Hash::make($password);
$user->save();
});
return $res === Password::PASSWORD_RESET
? response()->json(['message' => 'Password has been reset'])
: response()->json(['message' => 'Invalid token or email'], 400);
}
}
?>
Результат выполнения кода:
{"message": "Password has been reset"}
Пример
Давайте обработаем ошибку сброса пароля при неверном токене:
<?php
namespace App\Http\Controllers\Auth;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Password;
use Illuminate\Support\Facades\Hash;
use App\Models\User;
class ResetPasswordController extends Controller
{
public function reset(Request $request)
{
$credentials = [
'email' => 'user@example.com',
'password' => 'newpassword',
'password_confirmation' => 'newpassword',
'token' => 'invalid_token_12345',
];
$res = Password::reset($credentials, function (User $user, $password) {
$user->password = Hash::make($password);
$user->save();
});
if ($res === Password::INVALID_TOKEN) {
echo 'Invalid token provided';
} elseif ($res === Password::INVALID_USER) {
echo 'User not found';
} else {
echo 'Password reset successful';
}
}
}
?>
Результат выполнения кода:
"Invalid token provided"
Пример
Давайте выполним сброс пароля с использованием кастомного guard:
<?php
namespace App\Http\Controllers\Auth;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Password;
use Illuminate\Support\Facades\Hash;
use App\Models\Admin;
class ResetPasswordController extends Controller
{
public function reset(Request $request)
{
$credentials = [
'email' => 'admin@example.com',
'password' => 'newadminpassword',
'password_confirmation' => 'newadminpassword',
'token' => $request->input('token'),
];
$res = Password::broker('admins')->reset($credentials, function (Admin $admin, $password) {
$admin->password = Hash::make($password);
$admin->save();
});
echo $res === Password::PASSWORD_RESET
? 'Password reset successful for admin'
: 'Failed to reset password';
}
}
?>
Результат выполнения кода:
"Password reset successful for admin"
Смотрите также
-
метод
sendResetLink,
который отправляет ссылку для сброса пароля на email пользователя -
метод
attempt,
который выполняет попытку аутентификации пользователя -
метод
login,
который выполняет вход пользователя в систему -
метод
make,
который создаёт хеш пароля для безопасного хранения