Laravel JWT. Авторизация через access token
Данный материал предоставлен сайтом
PacificSky.Ru исключительно в ознакомительных целях. Администрация не несет ответственности за его содержимое.
Сегодня мы поговорим про JWT авторизацию/регистрацию при помощи токенов на фреймворке Laravel.
- В первую очередь необходимо скачать сам фреймворк Laravel.
Откройте терминал, перейдите в папку, в корой вы хотите расположить проект и выполните команду:composer create-project --prefer-dist laravel/laravel blog
Данная команды выполнит скачивание фреймворка и поместит в папку blog.На момент публикации статьи была скачана Laravel версии 5.8.21 - Скачиваем JWT расширение tymon/jwt-auth.
Перейдите в папку с проектомcd blogи выполните команду:composer require tymon/jwt-auth": "^1.0.0-rc.2
- Добавляем Service Provider:
Откройте файл app.php в папке config.config/app.php
Найдите ключ массива с названием providers.
И добавьте в него строкуTymon\JWTAuth\Providers\LaravelServiceProvider::class,
Должно получиться что-то вроде этого:'providers' => [ ... Tymon\JWTAuth\Providers\LaravelServiceProvider::class, ]
- Выполните команду для публикации конфигурационного файла:
php artisan vendor:publish --provider="Tymon\JWTAuth\Providers\LaravelServiceProvider"
Теперь в папке config у вас должен появиться файл jwt.phpconfig/jwt.php
- Сгенерируйте секретный ключ:
В терминале в корне проекта выполните командуphp artisan jwt:secret
Выполнение данной команды добавит в .env файл строку с секретным ключом. - Откройте .env файл и отредактируйте
Найдите и отредактируйте строки под свои конфигурации, которые отвечают за параметры соединения с базой данных.DB_CONNECTION=mysql // Тип сервера базы данных DB_HOST=127.0.0.1 // Ip Адрес DB_PORT=3306 // Порт DB_DATABASE=blog // Наименование базы данных DB_USERNAME=root // Логин DB_PASSWORD=root // Пароль
- Необходимо выполнить миграции для создания базовых таблиц
После настройки конфигурационных параметров необходимо выполнить миграции для создания базовых таблиц.
Перейдите в корень сайта и выполните команду:php artisan migrate
В чистой Laravel по умолчанию будут созданы таблицы users, password_reset и migrations. - Откройте и отредактируйте файл модели User.php, который находится в папке app:
app/User.php
В модель User.php необходимо добавить 2 метода:
В конечном итоге модель User.php должна выглядеть следующим образом: - Настройки конфигураций 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 будет выполнять всю работу! - Добавление основных маршрутов для проверки подлинности.
Откройте и отредактируйте файл 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'); });
- Создайте AuthController
Откройте терминал и выполните команду из корня проектаphp artisan make:controller AuthController
Выполнение данной команды создаст в вашем проекте контроллер авторизации. - Откройте и отредактируйте AuthController.
AuthController.php находится по следующему пути -app/Http/Controllers/AuthController.php
Откройте данный контроллер и добавьте в него следующий код:
На этом стандартная установка и настройка JWT закончена. Приступим к разработке метода регистрации. - Авторизация/Регистрация с помощью 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.
В процессе регистрации мы создали нового пользователя, авторизовались за него, получили его персональный токен и запросили его персональные данные по его токену.
На этом все! Если у вас появились вопросы, то оставляйте их в комментариях к данной статье. Попробуем разобраться. - В первую очередь нам нужно запустить встроенный веб сервер laravel.
Комментариев 2
Посетители, находящиеся в группе Гости, не могут оставлять комментарии к данной публикации.