Быстрое создание функции авторизации
Чтобы сделать функционал авторизации и регистрации на сайте, выполните Astran команды:php artisan make:auth
php artisan migrate
После выполнения этих команд можно пеерейти по адресу "/register
", где появится форма авторизации. В функции уже все сконфигурировано "из коробки". Эти настройки можно найти в файле "config/auth.php". В дополнение к этому, выполнение команды создаст все нужные для аутентификации представления и поместит в папку resources/views/auth
. Помимо этого будет создана папка с макетом приложения resources/views/layouts
Laravel для обработки функций авторизации имеет два механизма: защитники и провадйеры. Грубо говоря, первые созраняют данные в сессии и cookies, а вторые получают данные их хранилища. При этом для получения данных можно использовать модели Eloquent и конструктор запросов к базе данных.
Классы и маршруиы для аутентификации
В состав Laravel вхходит несколько контроллеров аутентификации, расположенными вApp\Http\Controllers\Auth
. Перечислим их функции:
- RegisterController - обрабатывает регистрацию нового пользователя
- LoginController - обрабатывает аутентификацию
- ForgotPasswordController - обрабатывает отправку по почте ссылок для сброса паролей
- ResetPasswordController - содержит логику для сброса паролей
app/Http/routes.php
:
<?php
// маршруты аутентификации
Route::get('auth/login', 'Auth\AuthController@getLogin');
Route::post('auth/login', 'Auth\AuthController@postLogin');
Route::get('auth/logout', 'Auth\AuthController@getLogout');
// маршруты регистрации
Route::get('auth/register', 'Auth\AuthController@getRegister');
Route::post('auth/register', 'Auth\AuthController@postRegister');
?>
После выполнения аутентификации пользователь перенаправляется на страницу "/home". Адрес этой страницы можно переопределить, задав свойство "redirectTo" у контроллеров LoginController, RegisterController и ResetPasswordController:
<?php
protected $redirectTo = '/';
?>
Для изменения адреса перенаправления после выхода из системы, необходимо задать свойство redirectAfterLogout контроллера AuthController:
<?php
protected $redirectAfterLogout = '/login';
?>
Если это свойство не задано, то перенаправление будет вести на корневой каталог "/".
Представления для аутентификации
Представления для форм аутентификации необходимо предоставлять самостоятельно. Если используете Blade для представлений, то представление для входа в систему должно быть вresources/views/auth/login.blade.php
, а представление для регистрации в resources/views/auth/register.blade.php
Приведём пример простейшей формы для входа на сайт:
<!-- resources/views/auth/login.blade.php -->
<form method="POST" action="/auth/login">
{!! csrf_field() !!}
Email: <input type="email" name="email" value="{{ old('email') }}">
<br>
Пароль: <input type="password" name="password" id="password">
<br>
Запомнить меня: <input type="checkbox" name="remember" checked>
<br>
<button type="submit">Login</button>
</form>
Простейшее представление формы регистрации:
<!-- resources/views/auth/register.blade.php -->
<form method="POST" action="/auth/register">
{!! csrf_field() !!}
Имя пользователя:
<input type="text" name="name" value="{{ old('name') }}">
<br>
Email: <input type="email" name="email" value="{{ old('email') }}">
<br>
Пароль: <input type="password" name="password" id="password">
<br>
Подтверждение пароля:
<input type="password" name="password_confirmation">
</br>
<button type="submit">Register</button>
</form>
Получение данных пользователя
После входа пользователя на сайт его данные можно получить через класс Auth:<?php
use Illuminate\Support\Facades\Auth;
// получить текущего пользователя
$user = Auth::user();
// получить ID текущего пользователя
$id = Auth::id();
// проверить авторизован ли пользователь
if (Auth::check()) {
// пользователь авторизован
}
// завершение сессии пользователя
Auth::logout();
?>
Защита маршрутов
Часто на сайтах существуют закрытые разделы, которые доступны только авторизованным пользователям. Чтобы создать такой раздел, необходимо воспользоваться функционалом маршрутов и методом middleware:<?php
Route::get('profile', function () {
// только зарегистрированные
// пользователи могут войти в этот раздел
})->middleware('auth');
?>
Подробнее о посредниках можно прочитать в статье "Посредники Middleware в Laravel"
При прикреплении посредника к маршруту можно указать, какой именно защитник будет обрабатывать запросы. Этот защитник должен соотвертствовать одному из ключей в массиве guards файла auth.php:
<?php
public function __construct(){
$this->middleware('auth:api');
}
?>