Аутентификация — процедура проверки подлинности субъекта, позволяющая убедиться в том, что субъект, предъявивший свой идентификатор, на самом деле является именно тем субъектом, идентификатор которого он использует. Для этого он должен подтвердить факт обладания некоторой информацией, которая может быть доступна только ему одному (пароль, ключ и т.д.).
Простыми словами, аутентификация – это процесс проверки логина и пароля пользователя (или аналогичных данных).

Настройки.

Настройки аутентификации, для 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 в моей заметке.