Laravel. Аутентикация

screenshot-laravel com 2016-03-28 10-36-38 В каждом нормальном сайте есть аутентикация/авторизация. А в некоторых сайтах даже есть регистрация пользователей. И везде это работает практически одинаково. Поэтому создатели Laravel сделали авторизацию, которую можно построить в несколько минут.

Установка
==================
Предполагаем, что у вас установлен свежий Laravel c минимумом пользовательских изменений.
Делаем комаду:

php artisan make:auth

Эта команда создаёт все необходимые роуты, контроллеры, вьюсы. Практически всё готово, надо только создать таблицы в БД.

В базовой поставке Laravel уже есть нужные миграции. Их надо просто накатить

php artisan migrate 

И всё. Готово! Обратите внимание на ссылки в правом верхнем углу.
Laravel со свежеустановленной аутентикацией

А теперь давайте рассмотрим, что было добавлено

Роуты
=================================

В файле /routes/web.php, где мы привыкли редактировать роуты,

Auth::routes();
Route::get('/home', 'HomeController@index');

Вторая строчка предназначена для залогиненных пользователей. Её можно переписать и переопределить прямо тут.
Первая же строчка вставляет роуты для всего прочего цикла. Эта команда очень хитро вложенная, но в конце концов она выполняет этот код из файла
/vendor/laravel/framework/src/Illuminate/Routing/Router.php

    public function auth()
    {
        // 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');
    }

Всё тут более или менее разумно и понятно. Как это переопределить, можно ли это переопределить, lf и стоит ли это переопределять? Пока буду использовать as is. Тем более что оно работает.

Контроллеры / Вьюсы / Шаблоны
==============================================
Кроме роутов эта штука создаёт контроллеры и вьюсы.
Контроллеры собственно тут: /app/Http/Controllers/Auth
Вьюсы — тут: /resources/views/auth

Собственно больше добавить тут нечего.

Как получить авторизованного пользователя
============================================================

Собственно вот:

// Get the currently authenticated user...
$user = Auth::user();

// Get the currently authenticated user's ID...
$id = Auth::id();

Узнать, залогинился ли пользователь:

use Illuminate\Support\Facades\Auth;

if (Auth::check()) {
    // The user is logged in...
}

Разрешить/запретить страницу
==============================================

Самая частая задачка — запретить неавторизованному пользователю какую-то страницу. Это можно делать в роутах:

Route::get('profile', function () {
    // Only authenticated users may enter...
})->middleware('auth');

Или в контроллере:

public function __construct()
{
    $this->middleware('auth');
}

Надо отдельно отметить, что тут подключается middleware. Как это описано в документации: приложения на Laravel — это как лук, у них много слоёв. И вот middleware — это такой промежуточный слой, который можно включать или выключать.

Вообще middleware — это большая тема и долгий разговор, здесь я пока ограничусь общим представлением как это можно использовать

В нашем случае middleware('auth') включает проверку на авторизацию.

Также можно использовать middleware('guest') для страниц, которые предназначены для неавторизованного пользователя.

А middleware('auth.basic') позволяет выполнить авторизацию без отдельной страницы для входа, используя лишь Basic авторизацию.

Laravel. Аутентикация: 3 комментария

  1. Nks

    Я практикую обычно перекрытие авторизации с Route::group и навешиваю middleware на данную группу. Получается намного меньше телодвижений. А в passport из 5.3/5.4 еще можно круто разруливать и rest. Категорически советую, если решил освоить сторону vue.js и full rest api.

  2. Nks

    P.S. Забыл проставить категорию для поста

  3. altesack Автор записи

    А вот зачем нужен passport я так и не понял. Нужен ли он для простого сайта, который не планирует предоставлять API на сторону?
    ЗЫ: Категорию подправил. Спасибо

Комментарии запрещены.