PHPackages                             sinbadxiii/phalcon-auth - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Framework](/categories/framework)
4. /
5. sinbadxiii/phalcon-auth

ActiveLibrary[Framework](/categories/framework)

sinbadxiii/phalcon-auth
=======================

Phalcon Auth - Guard-Based Authentication

v2.1.3(2mo ago)1010.7k↓16.7%62MITPHPPHP ^7.4 || ^8.0

Since Mar 15Pushed 2mo ago1 watchersCompare

[ Source](https://github.com/sinbadxiii/phalcon-auth)[ Packagist](https://packagist.org/packages/sinbadxiii/phalcon-auth)[ RSS](/packages/sinbadxiii-phalcon-auth/feed)WikiDiscussions master Synced 1mo ago

READMEChangelog (10)Dependencies (2)Versions (35)Used By (2)

Phalcon Auth
============

[](#phalcon-auth)

[![Banner](https://github.com/sinbadxiii/images/raw/master/phalcon-auth/phalcon-auth-logo.png?raw=true)](https://github.com/sinbadxiii/images/blob/master/phalcon-auth/phalcon-auth-logo.png?raw=true)

You can see an example of an application with authentication here [sinbadxiii/phalcon-auth-example](https://github.com/sinbadxiii/phalcon-auth-example)

[![Software License](https://camo.githubusercontent.com/c090e080484e2a2bc766446291d04437db823929042bf614b26a1643660ddf6f/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f6c6963656e73652d4d49542d627269676874677265656e3f7374796c653d666c61742d737175617265)](LICENSE)[![Packagist Downloads](https://camo.githubusercontent.com/34f18127cc809bd49715bf5186decb3c16b937a781de6cbcb0f72e426bb248bf/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f64742f73696e626164786969692f7068616c636f6e2d617574683f7374796c653d666c61742d737175617265)](https://packagist.org/packages/sinbadxiii/phalcon-auth)[![Latest Version](https://camo.githubusercontent.com/8eb60d3b12360a2fe221dc5d7aec80dde2b20e795eee8a4c4313f4e724214484/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f72656c656173652f73696e626164786969692f7068616c636f6e2d617574683f7374796c653d666c61742d737175617265)](https://github.com/sinbadxiii/phalcon-auth/releases)

Extended guards
---------------

[](#extended-guards)

- [JWT Guard](https://github.com/sinbadxiii/phalcon-auth-jwt)

Phalcon version
---------------

[](#phalcon-version)

> Unfortunately version 2 of the library no longer supports Phalcon 4.

Phalcon 3Phalcon 4Phalcon 5Phalcon 6❌❌✔️❓PHP are supported
-----------------

[](#php-are-supported)

^7.4-8.1.

Install
-------

[](#install)

Require the project using composer:

`composer require "sinbadxiii/phalcon-auth:^v2.0.0"`

Introduction
------------

[](#introduction)

[![Banner](https://github.com/sinbadxiii/images/raw/master/phalcon-auth/auth-scheme.webp?raw=true)](https://github.com/sinbadxiii/images/blob/master/phalcon-auth/auth-scheme.webp?raw=true)

Phalcon Auth позволит вам создать систему аутентификации в вашем веб-приложении.

Система аутентификации имеет такие понятия как «Охранники» (Guard) и «Поставщики» (Provider), охранники определяют, как пользователи будут аутентифицироваться, например, используя стандартные Хранилища Сессии и файлов куки.

Провайдеры определяют, какие данные будут браться в качестве пользователей, и так же откуда будут извлекаться эти пользователи. Откуда будут извлекаться данные пользователей определяют Адаптеры (Adapter). Обычно это `Phalcon\Mvc\Model` и построитель запросов к базе данных.

Кроме того есть другие варианты адаптеров: файл или массив с данными. Можно создать свой адаптер, реализуя интерфейс адаптера. Об этом поговорим чуть позже.

> Guards и Providers не следует путать с «roles» и «permissions» [ACL](https://docs.phalcon.io/4.0/en/acl). Auth и ACL следует использовать вместе, если требуется более точная надстройка доступа к узлам приложения. Например использовать роль `manager` со специфическими правами.

Быстрый старт
-------------

[](#быстрый-старт)

Полностью пример готового приложения с аутентификацией доступен по адресу [sinbadxiii/phalcon-auth-example](https://github.com/sinbadxiii/phalcon-auth-example). Это типовой проект на Phalcon, который можно использовать как старт нового приложения, либо же просто ознакомиться с возможностями аутентификации на примере данного приложения.

Логика работы
-------------

[](#логика-работы)

Общий принцип работы аутентификации заключается в том, что пользователь вводит свое имя пользователя и пароль через форму входа. Если эти учетные данные верны, приложение сохранит информацию об аутентифицированном пользователе в сессии пользователя и будет считать пользователя "аутентифицированным". В случае использования "Запомнить меня" может быть создан файл cookie, который содержит идентификатор сессии, чтобы последующие запросы к приложению могли быть связаны с нужным пользователем. После получения идентификатора сессии из файла cookie приложение извлечет данные пользователя.

Возьмем другой случай, когда удаленному сервису необходимо пройти аутентификацию для доступа к API, обычно файлы cookie не используются для аутентификации, поскольку веб-браузер отсутствует. Вместо этого удаленная служба отправляет токен API при каждом запросе. Приложение может проверить входящий токен по таблице действительных токенов API и "аутентифицировать" запрос как выполненный пользователем, связанным с этим токеном API.

Подготовка базы данных
----------------------

[](#подготовка-базы-данных)

Для использования данных из бд, понадобится создать таблицу `users`.

Если необходимо будет использовать функцию "Запомнить меня" - `RememberMe`, которая позволяет хранить сеанс аутентификации пользователя длительное время, то так же понадобится таблица `users_remember_tokens`, ну и соответственно ее модель в виде `App\Models\RememberToken`.

Для быстрого создания таблиц вы можете импортировать файлы из папки `db/users.sql`, `db/users_remember_tokens.sql`, а так же `db/create_auth_token_users.sql`, если будете использовать в качестве Guard - Token, которому необходимо поле `auth_token` для корректной работы.

Managers
--------

[](#managers)

При создании аутентификации вы можете воспользоваться одним из двух менеджеров: `Sinbadxiii\PhalconAuth\Manager` или `Sinbadxiii\PhalconAuth\ManagerFactory`.

Manager
-------

[](#manager)

Если вы строго придерживаетесь философии фреймворка Phalcon и хотите вручную настроить все компоненты аутентификации, то вам понадобится класс `Sinbadxiii\PhalconAuth\Manager` - с помощью данного менеджера можно настроить охранника, адаптер поставщиков и распределить доступы пользователям.

```
use Sinbadxiii\PhalconAuth\Manager;
use App\Models\User;
use Sinbadxiii\PhalconAuth\Adapter\Model;
use Sinbadxiii\PhalconAuth\Guard\Session;

$auth = new Manager();

$configAdapter = [
    'model' => User::class,
];

$adapter = new Model($this->getSecurity(), $configAdapter);
$guard   = new Session(
    $adapter,
    $this->getSession(),
    $this->getCookies(),
    $this->getRequest(),
    $this->getEventsManager()
);

$auth->addGuard("web", $guard, true);

return $auth;
```

В результате получился менеджер, который будет искать пользователей через модель `User` в таблице базе данных `users`. Результат аутентификации будет храниться в сессии, и куках, если выбрать "Запомнить меня". В качестве других аргументов нужно передать сервис провайдеры `$this->security`, `$this->session`, `$this->cookies`, `$this->request`, `$this->eventsManager`, которые будут необходимы при дальнейшем использовании охранника и адаптера поставщиков.

- public **addGuard**(string $nameGuard, GuardInterface $guard, bool $isDefault = false) - добавить охранника
- public **guard**(?string $name = null) - получить конкретного охранника или по заданного по дефолту
- public **setDefaultGuard**(GuardInterface $guard) - задать охранника по дефолту
- public **getDefaultGuard**() - получить охранника по дефолту
- public **acces**s(string $accessName) - назначить контроллеру определенный доступ
- public **getAccess**(string $accessName) - назначить требуемый доступ
- public **setAccess**(AccessInterface $access) - получить требуемый доступ
- public **setAccessList**(array $accessList) - зарегистрировать список доступов
- public **addAccessList**(array $accessList) - добавить список доступов
- public **except**(...$actions) - исключенные экшны из проверки доступа
- public **only**(...$actions) - обязательные экшны для проверки доступа
- public **\_\_call**() - magic \_\_call

Guards
------

[](#guards)

На данный момент существует два вида Охранников, которые покроют 90% типовых задач создания аутентификации веб-приложений. Это `Sinbadxiii\PhalconAuth\Guard\Session` и `Sinbadxiii\PhalconAuth\Guard\Token`, указывая одного из этих охранников вы выбираете, что будете использовать в своем приложении, аутентификацию на основе сессий или токена.

Предположительно Сессии вы будете использовать в веб-приложениях после логина в личный кабинет,а Токен, например, в микро приложениях в качестве api сервисов. Но ничего вам не мешает применять или комбинировать охранников в нестандартных приложениях.

Session Guard
-------------

[](#session-guard)

```
use Sinbadxiii\PhalconAuth\Manager;
use App\Models\User;
use Sinbadxiii\PhalconAuth\Adapter\Model;
use Sinbadxiii\PhalconAuth\Guard\Session;

$auth = new Manager();

$configAdapter = [
    'model' => User::class,
];

$adapter = new Model($this->getSecurity(), $configAdapter);
$guard   = new Session(
    $adapter,
    $this->getSession(),
    $this->getCookies(),
    $this->getRequest(),
    $this->getEventsManager()
);

$auth->addGuard("web", $guard, true);

return $auth;
```

- public function **\_\_construct**(AdapterInterface $adapter, SessionManagerInterface $session, Cookies $cookies, Request $request, EventsManagerInterface $eventsManager)
- public function **attempt**(array $credentials = \[\], $remember = false) - попытка аутентификации
- public function **user**() - получить аутентифицированного пользователя
- public function **validate**(array $credentials = \[\]) - валидация входных данных
- public function **getName**() - получение имени сессии
- public function **getRememberName**() - имя куки при запомнить меня
- public function **login**(AuthenticatableInterface $user, bool $remember = false) - логин экземпляра пользователя
- public function **loginById**($id, bool $remember = false) - логин по Id пользователя
- public function **once**(array $credentials = \[\]) - логин без сохранения пользователя в сессию
- public function **logout**() - выход
- public function **getLastUserAttempted**() - получение последнего попытавшегося залогиниться пользователя
- public function **viaRemember**() - проверка что пользователь был вытащен из Запомнить меня
- public function **getUser**() - получить пользователя
- public function **setRequest**(Request $request)
- public function **setSession**(SessionManagerInterface $session)
- public function **setCookies**(Cookies $cookies)
- public function **getAdapter**() - получить адаптер поставщика
- public function **setAdapter**(AdapterInterface $adapter) - назначить адаптера поставшика

Basic

- public function **basic**(string $field = 'email', array $extraConditions = \[\]) - аутентификация через Basic Auth
- public function **onceBasic**(string $field = 'email', array $extraConditions = \[\]) - аутентификация через Basic Auth без сохранения в сессию

Token Guard
-----------

[](#token-guard)

Чтобы воспользоваться `Sinbadxiii\PhalconAuth\Guard\Token`, необходимо в качестве второго аргумента передать конфиг с названиями имя параметра запроса и поля в хранилище данных пользователей, например, поле таблицы `users` в бд:

```
[
    ...
    'inputKey'   => 'auth_token', //имя параметра с токеном
    'storageKey' => 'auth_token', //имя поля в хранилище пользователей
    ...
]
```

```
use Sinbadxiii\PhalconAuth\Manager;
use App\Models\User;
use Sinbadxiii\PhalconAuth\Adapter\Model;
use Sinbadxiii\PhalconAuth\Guard\Token;

$auth = new Manager();

$configAdapter = [
    'model' => User::class,
];

$configGuard = [
    'inputKey'   => 'auth_token',
    'storageKey' => 'auth_token',
];

$adapter = new Model($this->getSecurity(), $configAdapter);
$guard   = new Token(
    $adapter,
    $configGuard
    $this->getRequest()
);

$auth->addGuard("api", $guard, true);

return $auth;
```

Соответствено GET запрос должен будет иметь вид:

```
//GET
https://yourapidomain/api/v2/users?auth_token=fGaYgdGPSfEgT41r3F4fg33
```

POST запрос:

```
//POST
//params POST request
[
  "auth_token": "fGaYgdGPSfEgT41r3F4fg33"
]

https://yourapidomain/api/v2/users
```

или заголовок `Authorization`:

```
Authorization: Bearer fGaYgdGPSfEgT41r3F4fg33

https://yourapidomain/api/v2/users
```

> Помните, что каждый ваш запрос к приложению, должен сопровождаться параметром `auth_token` с токеном доступа.

- public function **\_\_construct**(AdapterInterface $adapter, array $config, Request $request)
- public function **user**() - аутентифицированный пользователь
- public function **validate**(array $credentials = \[\]) - валидация
- public function **getTokenForRequest**() - поулчить токен из запросов (GET, POST, Headers)
- public function **setRequest**(Request $request)
- public function **getRequest**()
- public function **getAdapter**()
- public function **setAdapter**(AdapterInterface $adapter)

Создание своего Охранника
-------------------------

[](#создание-своего-охранника)

```
