runet-id / api-client-bundle
RUNET-ID API Client Bundle
Installs: 472
Dependents: 0
Suggesters: 0
Security: 0
Stars: 0
Watchers: 1
Forks: 0
Open Issues: 0
Type:symfony-bundle
Requires
- php: >=5.4.0
- runet-id/api-client: ^2.0
This package is not auto-updated.
Last update: 2020-08-21 20:28:15 UTC
README
Установка:
$ composer require runet-id/api-client-bundle:^1.0.0@alpha
Минимальная конфигурация
runet_id_api_client: container: default_credentials: default credentials: default: key: demokey secret: demosecret
Описание
Центральный для бандла класс - RunetId\ApiClientBundle\ApiClientContainer
. Он позволяет работать с несколькими ключами одновременно и поддерживает кеширование (по умолчанию включено файловое кеширование в стандартную папку симфони %kernel.cache_dir%/runet_id_api_client
).
Через конфигурацию в разделе container:credentials
можно указать несколько профилей. В default_credentials
указывается имя профиля по умолчанию (обязательный параметр).
Также в контейнере через RunetId\ApiClientBundle\ApiClientContainer::setCurrentName($name)
можно задать "текущий" профиль (например, при помощи RequestListener
, если выбор профиля зависит от параметров запроса к приложению). Если текущий профиль не был задан, метод RunetId\ApiClientBundle\ApiClientContainer::getCurrent()
возвращает профиль по умолчанию.
Рекомендуется всегда использовать метод RunetId\ApiClientBundle\ApiClientContainer::getCurrent()
, так как это обеспечивает максимальную гибкость.
Алиасы для быстрого доступа к сервисам (рекомендуется)
services: api_container: "@runet_id.api_client.container" api: class: RunetId\ApiClientBundle\ApiCacheableClient factory: [ "@api_container", getCurrent ] # создаем глобальную переменную в twig # для быстрого доступа к апи из шаблонов twig: globals: api: "@api"
Пример настройки авторизации
Подключаем js
:
<script src="{{ asset('bundles/runetidapiclient/js/runet_id_api_client.js') }}"></script> <script> var runetIdApiClient = new RunetId; runetIdApiClient.init({ apiKey: '{{ api.options.key }}', backUrl: '{{ url('auth.token') }}' }); </script>
Код кнопки для авторизации
<button onclick="runetIdApiClient.login(); return false;"> Войти через –RUNET——ID– </button>
Пример контроллера
<?php namespace AppBundle\Controller; use RunetId\ApiClient\Exception\ApiException; use RunetId\ApiClient\Model\User; use Symfony\Bundle\FrameworkBundle\Controller\Controller; use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\HttpKernel\Exception\HttpException; /** * @Route("/auth") */ class AuthController extends Controller { /** * @Route("/token", name="auth.token") * @param Request $request * @return Response * @throws HttpException */ public function tokenAction(Request $request) { $token = $request->query->get('token'); try { // содержит все данные о пользователе, полученные с RunetId $apiUser = $this->get('api')->user()->auth($token); } catch (ApiException $e) { throw new HttpException(403, $e->getMessage()); } // регистрируем пользователя на мероприятие со статусом "Участник" $this->get('api')->event()->register($apiUser->RunetId, User\Status::ROLE_PARTICIPANT); // здесь авторизуем пользователя средствами Symfony return new Response(' <script> window.onunload = function () { window.opener.location.reload(); }; setTimeout(window.close, 400); </script> '); } }