Сброс пароля
11.x
.
Почему это важно?
Введение
Хотите быстро приступить к работе? Просто запустите
php artisan make:auth
в новом приложении Laravel и перейдите в браузере по адресуhttp://your-app.dev/register
или по любому другому URL, который назначен вашему приложению. Эта единственная команда позаботится о создании всей вашей системы аутентификации, включая сброс паролей!
Большинство веб-приложений предоставляют пользователям возможность сбросить забытые пароли. Вместо того, чтобы заставлять вас повторять это в каждом приложении, Laravel предлагает удобные методы для отправки напоминаний о пароле и сброса пароля.
Чтобы использовать функции сброса пароля Laravel, ваша модель User должна иметь трейт
Illuminate\Notifications\Notifiable
.
О базе данных
Для начала убедитесь, что ваша модель App\User
реализует контракт Illuminate\Contracts\Auth\CanResetPassword
. Конечно, модель App\User
включенная в инфраструктуру, уже реализует этот интерфейс и использует трейт Illuminate\Auth\Passwords\CanResetPassword
, чтобы включить методы, необходимые для реализации интерфейса.
Создание таблицы токенов сброса пароля
Затем необходимо создать таблицу для хранения токенов сброса пароля. Миграция для этой таблицы входит в комплект поставки Laravel и находится в директории database/migrations
. Итак, все, что вам нужно сделать, это запустить миграцию базы данных:
php artisan migrate
Роутинг
Laravel включает классы Auth\ForgotPasswordController
и Auth\ResetPasswordController
, которые содержат логику, необходимую для отправки по электронной почте ссылок для сброса пароля и сброса пользовательских паролей. Все роуты, необходимые для выполнения сброса пароля, могут быть сгенерированы командой:
php artisan make:auth
Шаблоны
Опять же, Laravel сгенерирует все необходимые шаблоны для сброса пароля, когда выполняется команда make:auth
. Эти шаблоны размещаются в resources/views/auth/passwords
. Вы можете настроить их по мере необходимости для своего приложения.
После сброса паролей
После того как вы определили роуты и шаблоны для сброса паролей пользователя, вы можете зайти на эту страницу по урлу /password/reset
. ForgotPasswordController
, входящий в состав фреймворка, уже включает в себя логику отправки писем с ссылкой для сброса пароля, в то время как ResetPasswordController
включает в себя логику сброса пользовательских паролей.
После сброса пароля пользователь автоматически будет зарегистрирован в приложении и перенаправлен на /home
. Вы можете настроить местоположение переадресации сброса после сброса пароля, указав свойство redirectTo
в ResetPasswordController
:
protected $redirectTo = '/dashboard';
По-умолчанию токены сброса пароля истекают через один час. Вы можете изменить это с помощью опции сброса пароля
expire
в файлеconfig/auth.php
.
Настройка
Настройка гварда аутентификации
В своем конфиге auth.php
вы можете настроить несколько “гвардов”, которые могут использоваться для определения поведения аутентификации для нескольких пользовательских таблиц. Вы можете настроить включенный ResetPasswordController
для использования гварда по вашему выбору, переопределив метод guard
на контроллере. Этот метод должен возвращать экземпляр гварда:
use Illuminate\Support\Facades\Auth;
protected function guard()
{
return Auth::guard('guard-name');
}
Настройка брокера паролей
В конфиге auth.php
вы можете настроить несколько “брокеров” пароля, которые могут быть использованы для сброса паролей в нескольких пользовательских таблицах. Вы можете настроить включенные функции ForgotPasswordController
и ResetPasswordController
, чтобы использовать брокера по вашему выбору, переопределив метод broker
:
use Illuminate\Support\Facades\Password;
/**
* Получите брокер, который будет использоваться при сбросе пароля.
*
* @return PasswordBroker
*/
protected function broker()
{
return Password::broker('name');
}
Настройки отправки почты
Вы можете легко изменить класс уведомления, используемый для отправки ссылки сброса пароля пользователю. Для начала переопределите метод sendPasswordResetNotification
в своей модели User
. В рамках этого метода вы можете отправить уведомление с использованием любого выбранного вами класса уведомлений. $token
сброса пароля – первый аргумент, полученный методом:
/**
* Отправка уведомления о сбросе пароля.
*
* @param string $token
* @return void
*/
public function sendPasswordResetNotification($token)
{
$this->notify(new ResetPasswordNotification($token));
}