Php slim auth middleware

Saved searches

Use saved searches to filter your results more quickly

You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session. You switched accounts on another tab or window. Reload to refresh your session.

Basic Authorization Middleware Library

crtl/slim-auth-middleware

This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?

Sign In Required

Please sign in to use Codespaces.

Launching GitHub Desktop

If nothing happens, download GitHub Desktop and try again.

Launching GitHub Desktop

If nothing happens, download GitHub Desktop and try again.

Launching Xcode

If nothing happens, download Xcode and try again.

Launching Visual Studio Code

Your codespace will open once ready.

There was a problem preparing your codespace, please try again.

Latest commit

Git stats

Files

Failed to load latest commit information.

README.MD

Slim Authorization Middleware

This package provides a basic middleware to implement authorization of any type.

composer require crtl/slim-auth-middleware 

The package already comes with a prebuild implementation for HTTP-Basic Authroziation.

 use Crtl\AuthorizationMiddleware\BasicAuthorization; $app = new \Slim\App(); $app->add( new BasicAuthorization([ BasicAuthorization::CONFIG_ENABLE => true, BasicAuthorization::CONFIG_USER => "secret", BasicAuthorization::CONFIG_SECRET => "password" ]) ); $app->get("/", function($request, $response) use ($app) < $body = $response->getBody(); $body->write("Authorized"); return $response->withBody($body), >); $app->run();

If the request is authorized the app will call the next middleware. Otherwise Crtl\AuthorizationMiddleware\AbstractAuthorization::getErrorResponse will be called.

To implement a custom authorization just extend Crtl\AuthorizationMiddleware\AbstractAuthorization and implement the
protected isAuthorized() : bool method.

 class CustomAuthorization extends \Crtl\AuthorizationMiddleware\AbstractAuthorization< protected function isAuthorized(): bool < /* @var \Psr\Http\Message\ResponseInterface $response */ $response = $this->response; /* @var \Psr\Http\Message\RequestInterface $request */ $request = $this->request; /* check if authorized */ return true; > >

About

Basic Authorization Middleware Library

Источник

Middleware (промежуточное ПО)

Вы можете запустить код перед и после вашего обработчика в приложении Slim, чтобы манипулировать объектами Request и Response по своему усмотрению. Это называется промежуточное ПО. Зачем это делать? Возможно, вы хотите защитить свое приложение от подделки межсайтовых запросов. Возможно, вы хотите аутентифицировать запросы до запуска вашего приложения. Промежуточное программное обеспечение идеально подходит для этих сценариев.

Что такое промежуточное ПО?

Промежуточное ПО реализует интерфейс PSR-15:

  1. Psr\Http\Message\ServerRequestInterface — объект PSR-7 запроса
  2. Psr\Http\Server\RequestHandlerInterface — объект PSR-15 обработчика запроса

Промежуточное ПО может делать что угодно с этими объектами. Единственным жестким требованием является то, что промежуточное ПО ДОЛЖНО возвращать экземпляр Psr\Http\Message\ResponseInterface . Каждое промежуточное ПО вызовет следующее промежуточное ПО, передаст ему объект Request и получит от него объект Response.

Как работает промежуточное ПО?

Различные фреймворки используют промежуточное ПО по-разному. Slim добавляет промежуточное ПО в виде концентрических слоев, окружающих ваше основное приложение. Каждый новый слой промежуточного ПО окружает любые существующие слои промежуточного ПО. Концентрическая структура расширяется наружу по мере добавления дополнительных слоев промежуточного ПО.

Последний добавленный слой промежуточного ПО выполняется первым.

Когда вы запускаете приложение Slim, объект Request пересекает структуру промежуточного программного обеспечения извне. Сначала они вводят самое внешнее промежуточное ПО, затем следующее внешнее промежуточное ПО (и т.д.), Пока в конечном итоге не достигают обработчика приложения Slim. После того как приложение Slim обрабатывает соответствующий маршрут, результирующий объект Response выходит из приложения Slim и пересекает структуру ПО в обратном порядке. В завершение конечный объект Response выходит из самого внешнего промежуточного ПО, сериализуется в сырой HTTP-ответ и возвращается HTTP-клиенту. Вот схема, которая иллюстрирует поток процесса промежуточного программного обеспечения:

Архитектура промежуточного ПО

Как писать промежуточное ПО?

Промежуточное ПО — это вызываемый объект, который принимает два аргумента: объект Psr\Http\Message\ServerRequestInterface и объект Psr\Http\Server\RequestHandlerInterface . Каждое промежуточное ПО ДОЛЖНО возвращать экземпляр Psr\Http\Message\ResponseInterface .

Пример промежуточного ПО как анонимная функция.

handle($request); $existingContent = (string) $response->getBody(); $response = new Response(); $response->getBody()->write('BEFORE' . $existingContent); return $response; >; $afterMiddleware = function ($request, $handler) < $response = $handler->handle($request); $response->getBody()->write('AFTER'); return $response; >; $app->add($beforeMiddleware); $app->add($afterMiddleware); // . $app->run();

Пример промежуточного ПО как вызываемый класс.

Данный пример промежуточного ПО как класс, реализующий магический метод __invoke() .

handle($request); $existingContent = (string) $response->getBody(); $response = new Response(); $response->getBody()->write('BEFORE' . $existingContent); return $response; > >
handle($request); $response->getBody()->write('AFTER'); return $response; > >

Чтобы использовать эти классы в качестве промежуточного ПО, вы можете использовать цепочку вызовов метода add(new ExampleMiddleware()); вашего объекта Slim или объектов Route, возвращаемых методами get(), post(), put(), patch(), delete(), options(), any() или group(), как в приведенном ниже коде.

add(new ExampleMiddleware()); // Add Middleware On Route $app->get('/', function () < . >)->add(new ExampleMiddleware()); // Add Middleware On Group $app->group('/', function () < . >)->add(new ExampleMiddleware()); // . $app->run();

Как добавлять промежуточное ПО?

Вы можете добавить промежуточное ПО в приложение Slim, в отдельный маршрут приложения Slim или в группу маршрутов. Все сценарии принимают одно и то же промежуточное программное обеспечение и реализуют один и тот же интерфейс промежуточного программного обеспечения.

Промежуточное ПО приложения

Промежуточное ПО приложения вызывается для каждого входящего HTTP-запроса не зависимо от маршрута. Добавьте промежуточное ПО приложения с помощью метода add() экземпляра приложения Slim. В этом примере добавлен пример промежуточного программного обеспечения Closure :

add(function (Request $request, RequestHandler $handler) < $response = $handler->handle($request); $existingContent = (string) $response->getBody(); $response = new Response(); $response->getBody()->write('BEFORE ' . $existingContent); return $response; >); $app->add(function (Request $request, RequestHandler $handler) < $response = $handler->handle($request); $response->getBody()->write(' AFTER'); return $response; >); $app->get('/', function (Request $request, Response $response, $args) < $response->getBody()->write('Hello World'); return $response; >); $app->run();

Это вывело бы это тело ответа HTTP:

Промежуточное ПО маршрута

Промежуточное ПО маршрута вызывается, только если его маршрут соответствует текущему методу HTTP-запроса и URI. Промежуточное ПО для маршрутов указывается сразу после вызова любого из методов маршрутизации приложения Slim ( например, get() или post()). Каждый метод маршрутизации возвращает экземпляр \Slim\Route , и этот класс предоставляет тот же интерфейс промежуточного ПО, что и экземпляр приложения Slim. Добавьте промежуточное ПО в маршрут с помощью метода add() экземпляра Route . В этом примере добавлен пример промежуточного программного обеспечения Closure :

handle($request); $response->getBody()->write('World'); return $response; >; $app->get('/', function (Request $request, Response $response, $args) < $response->getBody()->write('Hello '); return $response; >)->add($mw); $app->run();

Это вывело бы это тело ответа HTTP:

Промежуточное ПО групп маршрутов

В дополнение ко всему, группы маршрутов, определяемые методом group() тоже позволяют использовать промежуточное ПО для всех маршрутов группы. Для добавления промежуточного ПО группе, нужно вызвать метод add() объекта, возвращаемого методом group().

get('/', function (Request $request, Response $response) < $response->getBody()->write('Hello World'); return $response; >); $app->group('/utils', function (RouteCollectorProxy $group) < $group->get('/date', function (Request $request, Response $response) < $response->getBody()->write(date('Y-m-d H:i:s')); return $response; >); $group->get('/time', function (Request $request, Response $response) < $response->getBody()->write((string)time()); return $response; >); >)->add(function (Request $request, RequestHandler $handler) use ($app) < $response = $handler->handle($request); $dateOrTime = (string) $response->getBody(); $response = $app->getResponseFactory()->createResponse(); $response->getBody()->write('It is now ' . $dateOrTime . '. Enjoy!'); return $response; >); $app->run();

При запросе GET /utils/date будет выведена примерно такая строка.

It is now 2015-07-06 03:11:01. Enjoy!

Посещение /utils/time выведет что-то такое:

It is now 1436148762. Enjoy!

Но посещение / (корня домена), приведет к следующему выводу, так как промежуточное ПО не было назначено:

Передача переменных из промежуточного ПО

Самый простой способ передать атрибуты из промежуточного программного обеспечения — это использовать атрибуты запроса.

Установка переменной в промежуточном ПО:

$request = $request->withAttribute('foo', 'bar');

Получение переменной в обработчике:

$foo = $request->getAttribute('foo');

Поиск доступного промежуточного программного обеспечения

Возможно, вы уже нашли классы промежуточного ПО PSR-15, которые удовлетворяют ваши потребности. Вот несколько неофициальных списков для поиска:

Источник

Читайте также:  Php print all env
Оцените статью