Аутентификация в Laravel 5.*
Настройки
Настройки аутентификации, находятся в файле 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
Для добавления в базу данных базы пользователей необходимо настроить доступы в файле .env и выполнив команду миграции:
# php artisan migrate
Шаблоны страниц аутентификации.
В папке видов 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://yoursite/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» не будет.