
Простыми словами, аутентификация – это процесс проверки логина и пароля пользователя (или аналогичных данных).
Настройки.
Настройки аутентификации, для Laravel 5.4, находятся в файле config\auth.php. Там видим несколько массивов:'defaults' => [ 'guard' => 'web', 'passwords' => 'users', ],где:
'guard' – охранник;
'web' – группа настроек, которая раскрыта ниже в файле ;
'passwords' – определяет логику сброса пароля;
'users' – группа настроек, которая так же раскрыта ниже в файле.
'guards' => [ 'web' => [ 'driver' => 'session', 'provider' => 'users', ], 'api' => [ 'driver' => 'token', 'provider' => 'users', ], ],где:
'guards' – массив охранников;
'web' и 'api' – охранники;
'driver' – параметр, который определяет как информация о пользователе будет передаваться от запроса к запросу (по-умолчанию – сессия);
'users' – для охранников определен провайдер 'users', который описан ниже в настройке providers.
'providers' => [ 'users' => [ 'driver' => 'eloquent', 'model' => App\User::class, ],В массиве провайдеров указано как будут данные о пользователе получены из БД.
То есть в данном случае используется 'Eloquent' (реализация шаблона ActiveRecord в Laravel) и указан класс модели для работы.
'passwords' => [ 'users' => [ 'provider' => 'users', 'table' => 'password_resets', 'expire' => 60, ], ],Тут настраивается механизм сброса пароля.
'users' – расшифровывается параметр, который указан в первом массиве - 'defaults';
'table' – содержит название таблицы из БД предназначенной для сброса пароля. Данная таблица формируется при выполнении миграций, которые присутствуют в папке database\migrations при установке Laravel. То есть не забудьте выполнить миграции для формирования таблиц.;
'expire' – кол-во минут отведенное для сброса пароля.
Создание страниц аутентификации, контроллеров, маршрутов.
Автоматическое создание страниц входа, регистрации и тд. а так же контроллеров и маршрутов их обрабатывающих происходит вызовом всего одной команды из командной строки:
php artisan make:auth
Шаблоны страниц аутентификации.
В папке видов resources\views создадутся такие файлы:
- layouts/app.blade.php — родительский шаблон
- home.blade.php — информационная панель (dashboard) для вошедших пользователей
- auth/login.blade.php — страница входа
- auth/register.blade.php — страница регистрации
- auth/passwords/email.blade.php — страница подтверждения сброса пароля
- auth/passwords/reset.blade.php — страница для сброса пароля
Контроллеры.
При выполнении данной команды создастся контроллер app\Http\Controllers\HomeController.php подключающий домашнюю страницу.
В данном контроллере подключается посредник 'auth':
public function __construct() { $this->middleware('auth'); }запрещающий доступ пользователям не прошедшим аутентификацию к данному контроллеру, а вернее к страницам, которые выводятся с помощью данного контроллера.
Так же в деректории с контроллерами создастся папка Auth содержащая другие контроллеры, необходимые для использования аутентификации:
- ForgotPasswordController;
- LoginController;
- RegisterController;
- ResetPasswordController
Автоматически пропишутся маршруты в файле routes\web.php
Auth::routes(); Route::get('/home', 'HomeController@index')->name('home');
Команда Auth::routes() вызывает метод routes() фасада Auth из файла
vendor\laravel\framework\src\Illuminate\Support\Facades\Auth.php
и подключает несколько стандартных маршрутов для страниц аутентификации, регистрации, сброса пароля из файла vendor\laravel\framework\src\Illuminate\Routing\Router.php:
// Authentication Routes... $this->get('login', 'Auth\LoginController@showLoginForm')->name('login'); $this->post('login', 'Auth\LoginController@login'); $this->post('logout', 'Auth\LoginController@logout')->name('logout'); // Registration Routes... $this->get('register', 'Auth\RegisterController@showRegistrationForm')->name('register'); $this->post('register', 'Auth\RegisterController@register'); // Password Reset Routes... $this->get('password/reset', 'Auth\ForgotPasswordController@showLinkRequestForm')->name('password.request'); $this->post('password/email', 'Auth\ForgotPasswordController@sendResetLinkEmail')->name('password.email'); $this->get('password/reset/{token}', 'Auth\ResetPasswordController@showResetForm')->name('password.reset'); $this->post('password/reset', 'Auth\ResetPasswordController@reset');
Чтобы протестировать созданные автоматически файлы и посмотреть работу аутентификации, перейдите по ссылке
http::/название_сайта/home
Т.к. в данном контроллере подключен посредник 'auth', а аутентификация не пройдена – будет перенаправление на страницу входа. Чтобы залогиниться нужно сначала зарегистрироваться через форму, т.к. пароли заданные прямо в БД миграцией или запросом не работают (должны быть зашифрованы). На странице входа, сверху справа, есть ссылка для регистрации.
При успешной аутентификации будет перенаправление на страницу сайт/home и надпись «You are logged in!».
Применение.
Например нужно закрыть вход для определенной страницы. Для тестирования сначала нужно "выйти", если до этого залогинились..• Указываем для маршрута:
Route::get('/hidden', ['uses' => 'ContactController@show'])->name('hidden')->middleware('auth');или
Route::get('/hidden', ['middleware'=>['auth'], 'uses' => 'ContactController@show'])->name('hidden');'auth' – алиас для класса посредника Illuminate\Auth\Middleware\Authenticate заданный в файле
app\Http\Kernel.php
• Указываем в контроллере:
public function __construct() { $this->middleware('auth'); }
Например для админки создаем группу маршрутов и указываем им посредник 'auth' для входа только зарегистрированным пользователям:
//группа admin/ с аутентификацией Route::group(['prefix' => 'admin', 'middleware' => 'auth'], function(){ Route::get('/', ['uses' => 'admin\AdminController@show'])->name('admin_index'); ... });
Контроллер app\Http\Controllers\admin\AdminController.php
<?php namespace App\Http\Controllers\Admin; use Illuminate\Http\Request; use App\Http\Controllers\Controller; class AdminController extends Controller { public function show(){ return view('welcome'); } }
Теперь при переходе по ссылке http://yoursite/admin, если пользователь не вошел, будет перенаправление на страницу http://yoursite/login и пока не пройдена аутентификация - доступа к странице выводящейся шаблоном "welcome" не будет.
Читайте так же про фасад Auth в моей заметке.