Класс Password
Класс Password в Laravel используется для генерации и отправки ссылок для сброса пароля, а также для проверки и выполнения сброса пароля пользователей. Он работает через фасад Password и предоставляет удобные методы для интеграции с системой аутентификации. Основные методы класса: sendResetLink - отправляет ссылку для сброса на email, reset - выполняет сброс пароля с проверкой токена. Все методы возвращают объект ответа с результатом операции.
Синтаксис
<?php
use Illuminate\Support\Facades\Password;
$status = Password::sendResetLink($credentials);
$status = Password::reset($credentials, $callback);
?>
Метод sendResetLink принимает массив с данными пользователя, содержащий поле 'email'. Метод reset принимает массив с данными для сброса (email, password, password_confirmation, token) и колбэк-функцию для обновления пароля пользователя.
Пример отправки ссылки для сброса пароля
Давайте отправим ссылку для сброса пароля пользователю по email:
<?php
namespace App\Http\Controllers;
use Illuminate\Support\Facades\Password;
use Illuminate\Http\Request;
class PasswordResetController extends Controller
{
public function sendResetLink(Request $request)
{
$request->validate(['email' => 'required|email']);
$status = Password::sendResetLink(
$request->only('email')
);
if ($status === Password::RESET_LINK_SENT) {
return response()->json([
'message' => 'Reset link sent successfully'
]);
} else {
return response()->json([
'error' => 'Unable to send reset link'
], 422);
}
}
}
?>
Результат выполнения кода при успешной отправке:
{
"message": "Reset link sent successfully"
}
Результат выполнения кода при ошибке:
{
"error": "Unable to send reset link"
}
Пример выполнения сброса пароля
Давайте обработаем запрос на сброс пароля с проверкой токена:
<?php
namespace App\Http\Controllers;
use Illuminate\Support\Facades\Password;
use Illuminate\Http\Request;
use App\Models\User;
class PasswordResetController extends Controller
{
public function resetPassword(Request $request)
{
$request->validate([
'token' => 'required',
'email' => 'required|email',
'password' => 'required|min:8|confirmed',
]);
$status = Password::reset(
$request->only('email', 'password', 'password_confirmation', 'token'),
function (User $user, string $password) {
$user->forceFill([
'password' => bcrypt($password)
])->save();
$user->save();
}
);
if ($status === Password::PASSWORD_RESET) {
return response()->json([
'message' => 'Password reset successfully'
]);
} else {
return response()->json([
'error' => 'Invalid token or email'
], 422);
}
}
}
?>
Результат выполнения кода при успешном сбросе:
{
"message": "Password reset successfully"
}
Результат выполнения кода при ошибке валидации:
{
"error": "Invalid token or email"
}
Пример использования с брокером
Давайте укажем конкретный брокер для сброса пароля:
<?php
namespace App\Http\Controllers;
use Illuminate\Support\Facades\Password;
use Illuminate\Http\Request;
use App\Models\User;
class PasswordResetController extends Controller
{
public function resetWithBroker(Request $request)
{
$request->validate([
'email' => 'required|email',
'password' => 'required|min:8|confirmed',
'token' => 'required',
]);
$status = Password::broker('users')->reset(
$request->only('email', 'password', 'password_confirmation', 'token'),
function (User $user, string $password) {
$user->password = bcrypt($password);
$user->save();
}
);
if ($status === Password::PASSWORD_RESET) {
return response()->json([
'status' => 'success',
'message' => 'Password has been reset'
]);
} else {
return response()->json([
'status' => 'error',
'message' => 'Failed to reset password'
], 422);
}
}
}
?>
Результат выполнения кода:
{
"status": "success",
"message": "Password has been reset"
}
Смотрите также
-
класс
Auth,
который управляет аутентификацией пользователей -
метод
Hash::make,
который хеширует пароли для безопасного хранения -
метод
Auth::attempt,
который пытается аутентифицировать пользователя -
посредник
auth,
который защищает маршруты от неавторизованных пользователей