Laravel JWT. Авторизация через access token


Сегодня мы поговорим про JWT авторизацию/регистрацию при помощи токенов на фреймворке Laravel.

  1. В первую очередь необходимо скачать сам фреймворк Laravel.
    Откройте терминал, перейдите в папку, в корой вы хотите расположить проект и выполните команду:
    composer create-project --prefer-dist laravel/laravel blog

    Данная команды выполнит скачивание фреймворка и поместит в папку blog.
    На момент публикации статьи была скачана Laravel версии 5.8.21

  2. Скачиваем JWT расширение tymon/jwt-auth.
    Перейдите в папку с проектом cd blog и выполните команду:
    composer require tymon/jwt-auth": "^1.0.0-rc.2

  3. Добавляем Service Provider:
    Откройте файл app.php в папке config.
    config/app.php

    Найдите ключ массива с названием providers.
    И добавьте в него строку
    Tymon\JWTAuth\Providers\LaravelServiceProvider::class,

    Должно получиться что-то вроде этого:
    'providers' => [
        ...
        Tymon\JWTAuth\Providers\LaravelServiceProvider::class,
    ]

  4. Выполните команду для публикации конфигурационного файла:
    php artisan vendor:publish --provider="Tymon\JWTAuth\Providers\LaravelServiceProvider"

    Теперь в папке config у вас должен появиться файл jwt.php
    config/jwt.php

  5. Сгенерируйте секретный ключ:
    В терминале в корне проекта выполните команду
    php artisan jwt:secret

    Выполнение данной команды добавит в .env файл строку с секретным ключом.
  6. Откройте .env файл и отредактируйте
    Найдите и отредактируйте строки под свои конфигурации, которые отвечают за параметры соединения с базой данных.
    DB_CONNECTION=mysql // Тип сервера базы данных
    DB_HOST=127.0.0.1 // Ip Адрес
    DB_PORT=3306 // Порт
    DB_DATABASE=blog // Наименование базы данных
    DB_USERNAME=root // Логин
    DB_PASSWORD=root // Пароль

  7. Необходимо выполнить миграции для создания базовых таблиц
    После настройки конфигурационных параметров необходимо выполнить миграции для создания базовых таблиц.
    Перейдите в корень сайта и выполните команду:
    php artisan migrate

    В чистой Laravel по умолчанию будут созданы таблицы users, password_reset и migrations.
  8. Откройте и отредактируйте файл модели User.php, который находится в папке app:
    app/User.php

    В модель User.php необходимо добавить 2 метода:

    В конечном итоге модель User.php должна выглядеть следующим образом:

  9. Настройки конфигураций Auth guard
    Откройте файл config/auth.php
    Найдите массив
    'defaults' => [
        'guard' => 'web',
        'passwords' => 'users',
    ],

    Замените на
    'defaults' => [
        'guard' => 'api',
        'passwords' => 'users',
    ],

    Далее найдите массив
    'guards' => [
        'web' => [
            'driver' => 'session',
            'provider' => 'users',
        ],
    
        'api' => [
            'driver' => 'token',
            'provider' => 'users',
            'hash' => false,
        ],
    ],

    И замените на
    'guards' => [
        'web' => [
            'driver' => 'session',
            'provider' => 'users',
        ],
    
        'api' => [
            'driver' => 'jwt',
            'provider' => 'users',
            'hash' => false,
        ],
    ],

    Указав данные параметры мы устанавливаем API guard по умолчанию и говорим ему использовать драйвер JWT.
    Теперь мы можем использовать встроенную систему аутентификации Laravel, где JWT-auth будет выполнять всю работу!

  10. Добавление основных маршрутов для проверки подлинности.
    Откройте и отредактируйте файл routes/api.php.
    Необходимо добавить маршруту, отвечающие за аутентификацию пользователя:
    Route::group([
        'prefix' => 'auth'
    ], function () {
        Route::post('login', 'AuthController@login');
        Route::post('registration', 'AuthController@registration');
        Route::post('logout', 'AuthController@logout');
        Route::post('refresh', 'AuthController@refresh');
        Route::post('me', 'AuthController@me');
    });

  11. Создайте AuthController
    Откройте терминал и выполните команду из корня проекта
    php artisan make:controller AuthController

    Выполнение данной команды создаст в вашем проекте контроллер авторизации.
  12. Откройте и отредактируйте AuthController.
    AuthController.php находится по следующему пути -
    app/Http/Controllers/AuthController.php

    Откройте данный контроллер и добавьте в него следующий код:

    На этом стандартная установка и настройка JWT закончена. Приступим к разработке метода регистрации.
  13. Авторизация/Регистрация с помощью curl и postman
    • В первую очередь нам нужно запустить встроенный веб сервер laravel.
      Для этого в терминале необходимо выполнить команду:
      php artisan serve

      После перейдите на страницу официального разработчика postman и скачайте postman клиент для обращения к API проекта.
    • Откройте клиент POSTMAN. Перед вами должна быть открыта вкладка для создания нового соединения.
      Выберите метод POST и в поле Url укажите:
      http://localhost:8000/api/auth/registration


      Откройте вкладку Headers и добавьте 2 поля:
      Content-Type = application/x-www-form-urlencoded
      Accept = application/json


      Откройте вкладку Params и добавьте 3 поля:
      name = test
      password = test
      email = test@example.ru


      Нажмите кнопку Send.
      Данные должны отправиться на сервер и в базе данных в таблице users должна быть создана запись с новым пользователем.
      Для создания пользователя с помощью cUrl, достаточно выполнить запрос:
      curl -X POST \
        'http://localhost:8000/api/auth/registration?name=test&password=test&email=test@example.ru' \
        -H 'Accept: application/json' \
        -H 'Content-Type: application/x-www-form-urlencoded' 

    • Регистрация завершена. Теперь попробуем авторизоваться!
      Откройте новую вкладку, выберите метод передачи данных POST и укажите Url:
      http://localhost:8000/api/auth/login

      Откройте вкладку Headers и добавьте 2 поля:
      Content-Type = application/x-www-form-urlencoded
      Accept = application/json


      Откройте вкладку Body и выберите тип x-www-form-urlencoded и добавьте 2 поля:
      email = test@example.ru
      password = test


      Нажмите кнопку Send. После чего данные авторизации будут отправлены на сервер и в ответ должен придти access_token, token_type и expires_in.

    • Скопируйте содержимое поля access_token и token_type. Теперь попробуем узнать персональные данные пользователя данного аккаунта по его токену:
      Откройте новое окно. Выберите POST метод передачи данных и в Url укажите:
      http://localhost:8000/api/auth/me

      Откройте вкладку Headers и добавьте 3 поля:
      Content-Type = application/x-www-form-urlencoded
      Accept = application/json
      Authorization = Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwOlwvXC9sb2NhbGhvc3Q6ODAwMFwvYXBpXC9hdXRoXC9sb2dpbiIsImlhdCI6MTU2MDI4NDYxNiwiZXhwIjoxNTYwMjg4MjE2LCJuYmYiOjE1NjAyODQ2MTYsImp0aSI6InBXVW04RzhyRkNYUkFkeXMiLCJzdWIiOjIsInBydiI6Ijg3ZTBhZjFlZjlmZDE1ODEyZmRlYzk3MTUzYTE0ZTBiMDQ3NTQ2YWEifQ.eiIG8qf5v5JFOpOyg74DHURksf8LT40DXv0CMqIGPsA


      Выполнить авторизацию с помощью cUrl и получить токен, можно при помощи следующей команды:
      curl -X POST \
        http://localhost:8000/api/auth/login \
        -H 'Accept: application/json' \
        -H 'Content-Type: application/x-www-form-urlencoded' \
        -H 'cache-control: no-cache' \
        -d 'email=test%40example.ru&password=test'

    • На прошлом шаге мы получили значения полей token_type и access_token.
      Поле Authorization должно состоять из них.

      Нажмите на кнопку Send и получили ответ от Api сервера.
      Ответ состоит из авторизационных данных пользователя.
      Я получил ответ следующего вида:


      Получить персональные идентификационные данные при помощи cUrl можно с помощью выполнения команды:
      curl -X POST \
        http://localhost:8000/api/auth/me \
        -H 'Accept: application/json' \
        -H 'Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwOlwvXC9sb2NhbGhvc3Q6ODAwMFwvYXBpXC9hdXRoXC9sb2dpbiIsImlhdCI6MTU2MDI4NDYxNiwiZXhwIjoxNTYwMjg4MjE2LCJuYmYiOjE1NjAyODQ2MTYsImp0aSI6InBXVW04RzhyRkNYUkFkeXMiLCJzdWIiOjIsInBydiI6Ijg3ZTBhZjFlZjlmZDE1ODEyZmRlYzk3MTUzYTE0ZTBiMDQ3NTQ2YWEifQ.eiIG8qf5v5JFOpOyg74DHURksf8LT40DXv0CMqIGPsA' \
        -H 'Content-Type: application/x-www-form-urlencoded' \
        -H 'cache-control: no-cache'

    • Конец!

    В данном уроке была продемонстрирована установка, настройка и использование Laravel + расширение JWT.
    В процессе регистрации мы создали нового пользователя, авторизовались за него, получили его персональный токен и запросили его персональные данные по его токену.
    На этом все! Если у вас появились вопросы, то оставляйте их в комментариях к данной статье. Попробуем разобраться.

Комментариев 1

  1. Офлайн
    Hero 28 июня 2019 15:23
    Круто описано. Спасибо!
Информация
Посетители, находящиеся в группе Гости, не могут оставлять комментарии к данной публикации.