Аутентификация в Laravel

В Laravel есть механизмы для быстрого создания функции авторизации на сайте. В этой статье будут рассмотрены часть из них.

Быстрое создание функции авторизации

Чтобы сделать функционал авторизации и регистрации на сайте, выполните 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 - содержит логику для сброса паролей
По умолчанию в Laravel нет маршрутов для запросов к контроллерам. Но их можно прописать вручную в файле 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');
}
?>
MouseDC.ru - хостинг, виртуальный хостинг, покупка доменов, проверка доменов, WHOIS, курсы создания сайтов, вебинары по созданию, курсы разработки сайтов, доработка сайтов, сопровождение сайтов, разработка сайтов, техподдержка сайтов
Cмотрите другие статьи:
Была ли статья полезной?
Была ли эта статья полезна? Есть вопрос?
хостинг для сайтов
Закажите недорогой хостинг Заказать

всего от 290 руб

⇡ наверх