Что такое laravel api
REST API на Laravel в 100 строк кода
inb4: копипаста из документации
В гайде упор на быстрое развертывание минимального набора для полноценной разработки API в соответствии с best practice, взятыми из документации Laravel 5.7, собранными в одном месте. Писал для себя и коллег как шпаргалку, надеюсь пригодится кому-нибудь еще.
Предварительная настройка
Ставим фреймворк
Удаляем ненужные UI компоненты (vuejs, react)
php artisan preset none
Настраиваем подключение к БД
Приступаем к генерации
Получаем модель, миграцию и контроллер:
Создаем колонки в таблице БД
Правим миграцию, добавляя в таблицу нужны колонки. Наиболее часто используемые типы:
Применяем миграции, выполняя php artisan migrate
Генерируем правила валидации
Выполняем php artisan make:request GameRequest
Для минимизации кода, мы используем конструкцию switch для разных http-глаголов, вместо того, чтобы делать отдельные StoreGameRequest, UpdateGameRequest и т.д.
Собственные варианты описания ошибок
Если нужны собственные тексты ошибок, переопределяем метод messages(), который возвращает массив с переводами каждого правила:
Настраиваем контроллер и описываем бизнес-логику
Далее правим методы:
Если логики много, то её лучше вынести в отдельный слой Service/Repository
Настраиваем модель
Открываем модель app/Http/Game.php и добавляем свойства:
Настраиваем middleware
Чтобы наше приложение всегда возвращало json независимо от переданных заголовков, создаем middleware:
и добавляем в него код:
Регистрируем этот middleware в app/Http/Kernel.php :
Настраиваем роутинг
Открываем routes/api.php и добавляем:
Статичский метод Route::apiResource, в отличие от метода resource, исключает методы edit и create, оставляя только index, show, store, update, destroy.
Этого же можно добиться более очевидной записью:
Теперь, можно посмотреть пути командой php artisan route:list и пользоваться.
Послесловие
Если нужна авторизация, то подойдет стандартный Laravel Passport.
Настраиваем авторизацию Laravel Passport
Добавляем трейт Laravel\Passport\HasApiTokens в модель App\User и вызов Passport::routesmethod в метод boot app/AuthServiceProvider :
В файле config/auth.php меняем драйвер на passport:
Создаем контроллер для авторизации ‘php artisan make:controller Api/AuthController.php`
Добавляем туда код
После этого можно пользоваться методами api/register, api/login, api/logout для авторизации, и закрыть доступ к апи. Для этого нужно обернуть роутинг наших REST контроллеров в middleware:
Послепослесловие:
Тут бы еще сделать функциональные тесты и генерацию документации в swagger, но это немного выходит за рамки scaffold-туториала, так что об этом в другой раз
Создание и использование RESTful API в Laravel
Что такое API?
API – это Application Programming Interface, это описание способов которыми одна компьютерная программа может взаимодействовать с другой программой.
Что такое REST?
REST – это аббревиатура от REpresentational State Transfer. Этот термин был придуман Роем Филдингом в 2000 году. Это стиль архитектуры для проектирования слабо связанных приложений по протоколу HTTP, который часто используется при разработке веб-сервисов.
REST определяет 6 архитектурных ограничений, которые делают любой веб-сервис истинным RESTful API.
Теперь давайте перейдем к созданию и использованию RESTful API в Laravel.
Потребители нашего API смогут выполнять несколько ограниченных задач. Там будут следующие конечные точки:
Конечные точки API для неаутентифицированного маршрута
Связанные с категорией:
Связанные с сообщениями:
Связанные с автором:
Связано с тегом:
Конечная точка API для аутентифицированного маршрута
Связанные с комментарием:
Вы должны создать ресурсы API, контроллеры и маршруты API для вышеупомянутых конечных точек API.
Шаг 1: Давайте сначала создадим ресурсы API. Для этого выполните следующие действия:
При построении API вам может понадобиться слой преобразования, который находится между вашими Eloquent моделями и ответами JSON, которые фактически возвращаются пользователям вашего приложения. Классы ресурсов Laravel позволяют вам выразительно и легко преобразовывать ваши модели и коллекции моделей в JSON.
Она создаст CategoryResource в app\Http\Resources каталоге.
Шаг 2: Следующее действие заключается в создании необходимых контроллеров. Для этого выполните следующие действия:
Она создаст CategoryApiController в app\Http\Controllers\Api каталоге. Откройте этот файл и запишите методы для выполнения действий.
Здесь вы создали два метода index и posts внутри CategoryApiController.
Тестирование конечных точек API
Чтобы получить все категории вы должны отправить GET запрос по адресу http://127.0.0.1:8000/api/categories
RESTful API возвращает ответ
Мы используем Laravel Sanctum для аутентификации и авторизации. Мы выпустим токен API и используем его в Postman для аутентификации запроса.
Laravel Sanctum предоставляет легкую систему аутентификации для SPAs (одностраничных приложений), мобильных приложений и простых API на основе токенов. Sanctum позволяет каждому пользователю вашего приложения генерировать несколько токенов API для своей учетной записи. Этим токенам могут быть предоставлены способности / области действия, которые определяют, какие действия токены могут выполнять.
Чтобы использовать токен API, мы запустим команду tinker
php artisan tinker
Сгенерировать токен доступа
Теперь откройте Postman и сделайте следующее:
В этой статье мы смогли построить и использовать (потребитель был Postman) RESTful API с помощью Laravel. Мы рассмотрели создание ресурсов API, создание контроллера API и протестировали аутентифицированные и Неаутентифицированные маршруты API.
Создание REST API с аутентификацией
Ищете как создать RESTful API в Laravel? Если да, то я расскажу вам всё поэтапно, как создать полноценный API с аутентификацией с использованием Laravel Passport. API также известен как веб-служба.
На сегодняшний день, как мы знаем, Laravel является самым популярным фреймворком по причине своей безопасности. Поэтому многие разработчики выбирают его для разработки API мобильных приложений. Да, веб-службы очень важны при создании веб- и мобильных приложений, потому что вы можете создать одну базу данных для всех версий и работать с одинаковыми данными.
Если вы не знакомы с Laravel или не знаете, как начать создание API, не беспокойтесь, в этом уроке я шаг за шагом всё объясню. Вам просто нужно выполнить несколько этапов, чтобы получить API для регистрации, входа и работы с товарами (добавление, обновление, удаление).
Шаг 1: Установка Laravel
Поскольку это пошаговый урок, прямо с нуля, то нам нужно сначала установить Laravel. Откройте командную строку и выполните команду:
Шаг 2: Установка Passport
Устанавливаем Passport с помощью менеджера пакетов Composer, запустите команду:
После успешной установки пакета нам необходимо получить миграции для создания новых таблиц в нашей базе данных. Запускайте команду:
Далее, для получения токенов безопасности, нам нужно запустить команду:
Шаг 3: Настройка паспорта
В этом шаге мы должны провести настройку в трех местах: в модели, в сервис-провайдере и в файле конфигурации.
В модели мы добавим класс HasApiTokens,
В AuthServiceProvider мы добавим Passport::routes(),
В файле auth.php мы добавим настройки аутентификации api.
app/User.php
app/Providers/AuthServiceProvider.php
config/auth.php
Шаг 4: Добавляем таблицу товаров и Модель
Теперь нам нужно создать миграцию для таблицы товаров:
После выполнения этой команды вы найдете новый файл в папке database/migrations. Вам нужно вставить в него приведенный ниже код для создания таблицы товаров.
Теперь нужно запустить миграцию:
Таким образом мы создали таблицу «products». Теперь нужно сделать модель Product — создайте файл Product.php в папке app и поместите в него приведенный ниже код:
Шаг 5. Создание маршрутов API
На этом этапе мы создадим маршруты API. Laravel предлагает для записи маршрутов веб-сервисов файл api.php. Давайте добавим новый маршрут к этому файлу.
Шаг 6: Создание файлов Контроллера
В этом шаге мы будем создавать новые контроллеры — BaseController, ProductController и RegisterController. Для них я создал новую папку «API» в папке контроллеров.
app/Http/Controllers/API/BaseController.php
app/Http/Controllers/API/ProductController.php
app/Http/Controllers/API/RegisterController.php
Теперь мы готовы к запуску RESTful API и Passport API. Давайте запустим наш пример — открывайте консоль и вводите команду:
Убедитесь, что API использует следующие заголовки, как указано ниже:
Список адресов с методами
Теперь вы можете запускать вышеприведенные адреса, как на скриншотах:
Вход API:
Регистрация API:
Список товаров API:
Создание товара API:
Показ товара API:
Обновление товара API:
Удаление товара API:
Наш Телеграм-канал — следите за новостями о Laravel.
Задать вопросы по урокам можно на нашем форуме.
Создайте приложения на React и Laravel RESTful Back End: Часть 1, Laravel 5.5 API
Russian (Pусский) translation by Marat Amerov (you can also view the original English article)
В современном веб-приложении серверная сторона ограниченна бекендом через некоторые конечные точки входа API (Application Programming Interface). Клиент отправляет запросы этим конечным точкам, и сервер возвращает ответ. Однако сервер не заботится о том, как клиент выводит представление, что идеально соответствует принципу разделения ответствености. Эта архитектура позволяет разработчикам создавать надежные веб приложения, а также приложения для разных устройств.
В этом руководстве мы будем использовать последнюю версию Laravel версии 5.5 для создания RESTful API. Фронтэнд будет состоять из компонентов, написанных на React. Мы будем создавать поисковое приложение для листинга продуктов. В первой части руководства основное внимание будет уделено концепциям Laravel и бекенду. Давайте начнем.
Введение
Почему Laravel и React?
Если вы разрабатываете для веба, вы можете использовать одну базу кода как для сервера, так и для клиента. Однако далеко не каждая компания дает разработчику свободу использовать технологию по своему выбору, причем по некоторым веским причинам. Использование стека JavaScript для всего проекта является текущей нормой, но ничто не мешает выбрать две разные технологии для серверной и клиентской сторон.
Предварительное условие
Прежде чем приступить к работе, я собираюсь предположить, что у вас есть базовое представление об архитектуре RESTful и о том, как работают конечные точки API. Кроме того, если у вас есть предыдущий опыт в React или Laravel, вы сможете извлечь максимальную пользу из этого руководства.
Однако, если вы новичок в обоих фреймворках, не волнуйтесь. Руководство написано с точки зрения новичка, и вы должны быть в состоянии разобраться без особого труда. Исходный код руководства можно найти в GitHub.
Установка и настройка Laravel проекта
Laravel использует Composer для управления всеми зависимостями. Итак, прежде чем начинать работу с Laravel, загрузите и установите Composer на свой компьютер. Вам также может потребоваться настроить переменную среды path, чтобы Composer был доступен глобально.
Выполните следующую команду для загрузки и установки laravel.
/.composer/vendor/bin в свой путь, вы должны создать новый проект Laravel следующим образом:
Кроме того, вы можете использовать Composer для создания нового проекта без установщика laravel.
Настройка среды
Ваше приложение будет иметь .env файл в корневом каталоге. Здесь описывается вся информация о конфигурации, специфичная для среды. Создайте базу данных для своего приложения, если вы еще этого не сделали, и добавьте конфигурацию базы данных в файл .env.
Общие сведения о моделях, роутах и контроллерах
Архитектура Laravel. Контроллер возвращает ответ, и, следовательно, слой представления не требуется.
Поскольку мы создаем API с использованием Laravel, мы ограничим наше обсуждение моделью и контроллером. Мы рассмотрим наши варианты создания представления во второй части этого руководства.
Роутинг
Когда сервер получает HTTP-запрос, Laravel пытается сопоставить его с роутом, зарегистрированным внутри любого из файлов роутинга. Все файлы роутинга находятся внутри соответсвующего каталога. route/web.php содержит роуты для веб-интерфейса, тогда как route/api.php содержит роуты для API. Роуты, зарегистрированные в api.php, будут иметь префикс /api (как в localhost:3000/api). Если вам нужно изменить это поведение, вы должны перейти в класс RouteServiceProvider в /app/Providers/RouteServiceProvider.php и внести туда изменения.
Поскольку мы создаем приложение для списка продуктов, здесь указаны конечные точки API и HTTP-методы, связанные с этими конечными точками.
GET, POST, PUT и DELETE являются наиболее часто используемымы действиями REST
Роутер позволяет объявлять роуты для ресурса вместе с HTTP-методами, которые нацелены на этот ресурс. Вот пример файла роутинга, который возвращает некоторые жестко кодированные данные.
routes/api.php
Если вы хотите проверить, что роуты работают должным образом, вы должны использовать тулинг, например POSTMAN или curl.
Модель продукта
Eloquent ORM, входящий в состав Laravel, обеспечивает красивую, простую реализацию ActiveRecord для работы с вашей базой данных. Каждая таблица базы данных имеет соответствующую «Модель», которая используется для взаимодействия с этой таблицей. Модели позволяют запрашивать данные из ваших таблиц, а также вставлять новые записи в таблицу.
— Laravel Docs
Что относительно определения схемы базы данных? Миграция Laravel’а позаботится об этом. У Artisan есть команда миграции, которая позволяет вам определять вашу схему и постепенно обновлять ее на более позднем этапе. Давайте создадим модель и миграции для сущьности Product.
database/migrations/timestamp_create_products_table.php
Чтобы выполнить ожидающие миграции, вы должны выполнить следующую команду:
Но мы оставим все на своих местах и продолжим пользоваться соглашениями. Сгенерированная модель продукта находится внутри каталога app/. Хотя класс модели может казаться пустым, он оснащен различными методами построения запросов, которые можно использовать для запросов к базы данных. Например, вы можете использовать Product::all() для извлечения всех продуктов или Product::find(1) для получения определенного продукта с id 1.
Модели Laravel имеют встроенный механизм защиты от уязвимости массового назначения. Свойство fillable используется, чтобы объявить имена атрибутов, который можно смело присвоить.
app/Product.php
Заполнение базы данных
Laravel позволяет вам заполнить базу данных разработки и продакшена фиктивными данными, которые затем можно использовать для тестирования конечных точек API. Вы можете создать класс seed, выполнив следующую команду Artisan.
Сгенерированные файлы сидов будут помещены в каталог database/seeds.
database/seeds/ProductsTableSeeder.php
Выполните команду artisan db:seed для заполнения базы данных.
Вернемся к routes/api.php и добавим недостающие части.
routes/api.php
Контроллер
В файле роутинга в настоящее время размещается логика роутинга и обработки запросов. Мы можем переместить логику обработки запросов в класс контроллера, чтобы наш код был лучше организован и более читабельным. Давайте сначала сгенерируем класс контроллера.
app/HTTP/Controllers/ProductsController.php
routes/api.php
Откройте POSTMAN, и конечные точки продукта должны работать. Убедитесь, что заголовок Accept: application/json включен.
Валидация и обработка исключений
Если вы перейдете к несуществующему ресурсу, это то, что вы увидите.
app/Exceptions/Handler.php
Laravel также позволяет нам валидировать входящие HTTP-запросы с помощью набора правил валидации и автоматически возвращать ответ в JSON, если валидация не прошла. Логика проверки будет помещена внутри контроллера. Объект Illuminate\Http\Request предоставляет метод validate, который мы можем использовать для определения правил валидации. Давайте добавим несколько валидаций в методе store.
app/HTTP/Controllers/ProductsController.php
Заключение
Теперь у нас есть рабочий API для приложения с листингом продуктов. Однако API не имеет базовых функций, таких как аутентификация и ограничение доступа к неавторизованным пользователям. У Laravel есть встроенная поддержка аутентификации, а создание API для нее делается относительно просто. Я рекомендую вам добавить API аутентификации в качестве упражнения.
Для тех из вас, кто только начинает работать с Laravel или хочет расширить свои знания, найти примеры сайтов или приложений, у нас есть множество материалов, которые вы можете изучить на Envato Market.
Теперь, когда мы закончили работу с бекендом, мы сосредоточим внимание на концепциях фронтенда. Оставайтесь с нами во второй части руководства. Оставляйте свои комментарии.
API аутентификация (Passport)
Введение
В Laravel можно легко настроить аутентификацию через обычные формы входа, но что насчёт API? API обычно использует токены для аутентификации пользователей и не сохраняет состояние сессии между запросами. В Laravel реализована простая API аутентификация с помощью Laravel Passport, который предоставляет полную реализацию сервера OAuth2 для вашего приложения в считанные минуты. Passport создан на основе сервера League OAuth2, созданного Алексом Билби.
Предполагается, что вы уже знакомы с OAuth2. Если вы ничего не знаете о OAuth2, рекомендуем ознакомиться с основной терминологией и возможностями OAuth2 самостоятельно перед прочтением этой статьи.
Установка
Сначала установите Passport через менеджер пакетов Composer:
Затем зарегистрируйте сервис-провайдер Passport в массиве PHP providers в файле настроек config/app.php :
Сервис-провайдер Passport регистрирует свой собственный каталог миграций БД в фреймворке, поэтому вам надо мигрировать вашу БД после регистрации провайдера. Миграции Passport создадут таблицы, необходимые вашему приложению для хранения клиентов и токенов доступа:
Быстрое знакомство с фронтендом
Чтобы использовать Vue-компоненты Passport, вам необходимо использовать JavaScript-фреймворк Vue. Эти компоненты также используют CSS-фреймворк Bootstrap. Но даже если вы не используете эти фреймворки, компоненты будут хорошим образцом для вашей собственной реализации фронтенда.
Для публикации Vue-компонентов Passport используйте Artisan-команду sh vendor:publish :
После регистрации компонентов не забудьте выполнить sh gulp для перекомпилирования ваших ресурсов. После этого вы можете поместить компоненты в один из шаблонов вашего приложения, чтобы начать создавать клиентов и персональные токены доступа:
Настройка
Срок действия токенов
Выдача токенов доступа
Большинство разработчиков знакомы с OAuth2 по работе с кодами авторизации. При использовании кодов авторизации клиентское приложение перенаправляет пользователя на ваш сервер, где разрешается или запрещается его запрос на получение токена на доступ к клиенту.
Управление клиентами
Команда sh passport:client
JSON API
Но вам надо будет дополнить Passport JSON API своим собственным фронтендом, чтобы предоставить пользователям панель для управления их клиентами. Далее мы рассмотрим все конечные точки API для управления клиентами. Для удобства мы используем Vue для демонстрации создания HTTP-запросов к конечным точкам.
Если вы не хотите самостоятельно реализовывать весь фронтенд управления клиентами, вы можете использовать быстрое знакомство с фронтендом и получите полностью функциональный фронтенд за считанные минуты.
GET /oauth/clients
Этот маршрут возвращает всех клиентов для аутентифицированного пользователя. Это особенно полезно для просмотра всех клиентов пользователя, чтобы редактировать или удалять их:
POST /oauth/clients
Этот маршрут используется для создания новых клиентов. Ему необходимы следующие данные: название клиента ( PHP name ) и URL переадресации ( PHP redirect ). Этот URL будет использован для переадресации пользователя после подтверждения или отклонения запроса авторизации.
После создания клиента ему будут выданы ID клиента и секрет клиента. Эти значения будут использоваться при запросе токенов доступа у вашего приложения. Маршрут создания клиента вернёт новый экземпляр клиента:
PUT /oauth/clients/
Этот маршрут используется для изменения клиентов. Ему необходимы следующие данные: название клиента ( PHP name ) и URL переадресации ( PHP redirect ). Этот URL будет использован для переадресации пользователя после подтверждения или отклонения запроса авторизации. Маршрут вернёт обновлённый экземпляр клиента:
DELETE /oauth/clients/
Этот маршрут используется для удаления клиентов:
Запрос токенов
Переадресация для авторизации
После создания клиента разработчики могут использовать ID и секрет своего клиента для запроса кода авторизации и токенов доступа у вашего приложения. Во-первых, запрашивающее приложение должно сделать запрос переадресации в маршрут /oauth/authorize вашего приложения вот так:
Подтверждение запроса
Конвертирование кодов авторизации в токены доступа
Обновление токенов
Если ваше приложение выдаёт краткосрочные токены доступа, пользователям будет необходимо обновлять свои токены доступа с помощью токена обновления, который предоставляется при выдаче токена доступа. В этом примере мы используем HTTP-библиотеку Guzzle для обновления токена:
Токены предоставления пароля
Предоставление пароля OAuth2 позволяет вашим собственным клиентам, таким как мобильное приложение, получить токен доступа с помощью e-mail/логина и пароля. Это позволяет вам безопасно выдавать токены доступа своим собственным клиентам, не требуя от пользователя проходить через весь процесс авторизационной переадресации OAuth2.
Создание клиента предоставления пароля
Запрос токенов
Запомните, по умолчанию токены долговременны. Но вы можете настроить максимальное время действия токенов доступа при необходимости.
Запрос всех прав
Неявное предоставление токенов
Неявное предоставление похоже на предоставление авторизационного кода, но токен возвращается клиенту без обмена авторизационным кодом. Это предоставление наиболее часто используется для JavaScript или мобильных приложений, когда клиентские учётные данные не могут надёжно храниться. Для включения предоставления вызовите метод PHP enableImplicitGrant () в AuthServiceProvider :
После включения предоставления разработчики смогут использовать ID своего клиента для запроса токенов доступа у вашего приложения. Запрашивающее приложение должно сделать запрос переадресации по маршруту /oauth/authorize вашего приложения вот так:
Токены предоставления учётных данных клиента
Предоставление учётных данных клиента подходит для аутентификации машина-машина. Например, вы можете использовать это предоставление в запланированной задаче, которая выполняет обслуживающие действия через API. Для получения токена сделайте запрос к конечной точке oauth/token :
Персональные токены доступа
Иногда пользователям необходимо выдавать токены доступа самим себе, не проходя через обычный процесс авторизационной переадресации. Позволяя пользователям выдавать токены самим себе через UI вашего приложения, вы даёте им возможность экспериментировать с вашим API или упрощаете весь подход к выдаче токенов.
Создание клиента персонального доступа
Управление токенами персонального доступа
JSON API
В Passport также есть JSON API для управления персональными токенами доступа. Вы можете дополнить его своим фронтендом, предоставив пользователям панель для управления токенами персонального доступа. Далее мы рассмотрим все конечные точки API для управления токенами персонального доступа. Для удобства мы используем Vue для демонстрации создания HTTP-запросов к конечным точкам.
Если вы не хотите самостоятельно реализовывать весь фронтенд управления персональными токенами доступа, вы можете использовать быстрое знакомство с фронтендом и получите полностью функциональный фронтенд за считанные минуты.
GET /oauth/scopes
Этот маршрут возвращает все права, определённые для вашего приложения. Вы можете использовать этот маршрут для получения списка прав, которые пользователь может назначить персональному токену доступа:
GET /oauth/personal-access-tokens
Этот маршрут возвращает все персональные токены доступа, которые создал пользователь. Это особенно полезно для получения списка всех токенов пользователя, чтобы он мог отредактировать или удалить их:
POST /oauth/personal-access-tokens
Этот маршрут создаёт новые персональные токены доступа. Ему необходимы следующие данные: название токена ( PHP name ) и права ( PHP scopes ) для него:
DELETE /oauth/personal-access-tokens/
Этот маршрут удаляет персональный токен доступа:
Защита маршрутов
С помощью посредников
Passport содержит защитника аутентификации, который будет проверять токены доступа во входящих запросах. После настройки защитника api на использование драйвера passport вам остаётся только указать посредника auth:api для всех маршрутов, которые требуют корректный токен доступа:
Передача токена доступа
При вызове маршрутов, защищённых с помощью Passport, пользователи API вашего приложения должны указать свой токен доступа как токен Bearer в заголовке Authorization своего запроса. Например, при использовании HTTP-библиотеки Guzzle:
Права токена
Определение прав
Права позволяют клиентам вашего API запрашивать определённый набор разрешений при запросе авторизации на доступ к аккаунту. Например, если вы создаёте приложение для продаж, не всем пользователям API будет нужна возможность размещать заказы. Вместо этого вы можете позволить им только запрашивать авторизацию на доступ к статусам доставки. Другими словами, права позволяют пользователям вашего приложения ограничить действия, которые может выполнять стороннее приложение от их имени.
Назначение прав токенам
При запросе кодов авторизации
При выдаче персональных токенов доступа
Проверка прав
Проверка всех прав
Посредник scopes можно назначить на маршрут для проверки того, что токен доступа входящего запроса имеет все перечисленные права:
Проверка на любое право
Посредник scopes можно назначить на маршрут для проверки того, что токен доступа входящего запроса имеет хотя бы одно из перечисленных прав:
Проверка прав экземпляра токена
Когда авторизованный токеном доступа запрос поступил в ваше приложение, у вас всё ещё есть возможность проверить, есть ли у токена определённое право, методом PHP tokenCan () на аутентифицированном экземпляре User :
Использование вашего API с помощью JavaScript
При создании API бывает чрезвычайно полезно иметь возможность использовать ваш собственный API из вашего JavaScript-приложения. Такой подход к разработке API позволяет вашему приложению использовать тот же API, который вы предоставляете всем остальным. Один и тот же API может быть использован вашим веб-приложением, мобильными приложениями, сторонними приложениями и любыми SDK, которые вы можете опубликовать в различных менеджерах пакетов.
Обычно, если вы хотите использовать свой API из вашего JavaScript-приложения, вам необходимо вручную послать токен доступа в приложение и передавать его с каждым запросом в ваше приложение. Однако, Passport содержит посредника, который может обработать это для вас. Вам надо только добавить посредника CreateFreshApiToken в вашу группу посредников web :
Этот посредник будет прикреплять cookie laravel_token к вашим исходящим откликам. Этот cookie содержит зашифрованный JWT, который Passport будет использовать для аутентификации API-запросов из вашего JavaScript-приложения. Теперь вы можете делать запросы в API вашего приложения, не передавая токен доступа в явном виде:
Если вы используете другой JavaScript-фреймворк, вам надо убедиться, что он настроен на отправку этого заголовка с каждым исходящим запросом.
События
Passport создаёт события при выдаче токенов доступа и обновлении токенов. Вы можете использовать эти события для удаления или отмены других токенов доступа в вашей БД. Вы можете прикрепить слушателей к этим событиям в EventServiceProvider вашего приложения:
Комментарии (6)
Я чего-то тут не понимаю или это действительно так. Неужели любому клиенту, который попросит те или иные права, они ему так просто присваиваются. Т.е. если любой клиент захочет права админа, он отправляет на регистрационный сервер ‘scope’ ⇒ ‘place-admin’, и все он админ. Это бред какой-то или я чего-то не понял.
Запросить можно любые права, но утверждать их потребуется отдельно. Они не выдаются автоматически.
Пишу API для мобильного приложения и сразу возникло несколько вопросов.
1. Passport создаёт большое количество web маршрутов. Значит, они будут доступны и через мое API. Нужно ли OAuth сервер, коим является Passport, держать отдельно от API?
2. Что если я не хочу, чтобы клиенты мобильного приложения могли создавать других OAuth клиентов. Как ограничить это действие?
1.Auth сервер и создаётся для предоставления Api внешним сервисам, для аутентификации и взаимодействия с ними.
В вашем проекте, кто то создаёт клиентское приложение, и с помощью вашего api взаимодействует с ним, скажем с помощью passport вы проверяете права внешних сервисов к вашим методам api. Теоретически вы можете разместить api отдельно, но стоит учитывать например дополнительные запросы и т д.
Так же можно переопределить все маршруты passport.
2.Не совсем понял вопрос. Если вы хотите запретить через api, то на запросы с мобильного приложения можете добавить заголовок или генерировать какой нибудь ключ, который отвечает 100%, что запрос сделан из телефона.