sinbadxiii/phalcon-foundation-auth

Foundation for Phalcon Auth

0.0.4 2021-09-17 10:45 UTC

This package is auto-updated.

Last update: 2024-11-17 18:28:34 UTC


README

Базоый набор для работы аутентификации sinbadxiii/phalcon-auth из коробки.

В данной библиотеки присутствуют роуты, контроллеры, мидлвары для организации регистрации и авторизации пользователей.

Software License Packagist Downloads Latest Version

Installation

Phalcon 4 or Phalcon 5

PHP 7.2-8.0.

Require the project using composer:

composer require "sinbadxiii/phalcon-foundation-auth:^v0.0.3"

Run helper script

vendor/bin/phauth -c

Который скопирует контроллеры и middleware в ваше приложение, для более гибкого использования.

Если ваше приложение имеет нестандартные пути, то следует указать путь к папке с приложением (по умолчанию "app"), например укажем что у нас вместо папки app используется папка src.

vendor/bin/phauth -c -b src

Так же, если изменилась папка с контроллерами (по умолчанию "controllers" в app), то укажем новую папку, например Controllers:

vendor/bin/phauth -c -b src -s Controllers

После копирования в папке контроллеров появится папка Auth с контроллерами LoginController, RegisterController и пр.

А в корне app появится папка Security, в которой будет лежать мидлвар Authenticate, для проверки авторизации пользователя.

В сервисах нужно будет зарегистрировать провайдер Auth

$di->setShared("auth", function () {
    return new Sinbadxiii\PhalconAuth\Auth();
});

или

$authProvider = new \Sinbadxiii\PhalconAuth\AuthProvider();
$authProvider->register($di);

а в диспетчере приаттачить мидлвар

$di->setShared('dispatcher', function () use ($di) {

    $dispatcher = new Dispatcher();
    $eventsManager = $di->getShared('eventsManager');
    $eventsManager->attach('dispatch', new App\Security\Authenticate());
    $dispatcher->setEventsManager($eventsManager);

    return $dispatcher;
});

В файл вашего роутер добавить

<?php

use Sinbadxiii\PhalconFoundationAuth\Routes as AuthRoutes;


$router = $di->getRouter();

...

$router->mount(AuthRoutes::routes());

...

$router->handle($_SERVER['REQUEST_URI']);

Так же нужно будет проследить, чтобы уже имелись следующие сервис провайдеры:

  • session
  • cache
  • security
  • cookies
$di->setShared('session', function () {
    $session = new SessionManager();
    $files = new SessionAdapter([
        'savePath' => sys_get_temp_dir(),
    ]);
    $session->setAdapter($files);
    $session->start();

    return $session;
});

$di->setShared("cache", function () {

    $configCache = $this->getConfig()->path("cache");

    $serializerFactory = new Phalcon\Storage\SerializerFactory();
    $adapterFactory    = new Phalcon\Cache\AdapterFactory($serializerFactory);

    $adapter           = $adapterFactory->newInstance(
        $configCache->default, $configCache->options->toArray(),
    );

    return new Phalcon\Cache($adapter);
});

$di->set("security", function ()  use ($di) {
        $security = new Phalcon\Security();
        $security->setDI($di);
        return $security;
    }
);

//лучше всего шифровать данные кук
$di->set('cookies', function (){
        $cookies = new Phalcon\Http\Response\Cookies();
        $cookies->useEncryption(true);
        $salt = $this->getConfig()->path('app.key');
        $cookies->setSignKey($salt);
        return $cookies;
    }
);

либо воспользоваться сервисами из библиотеки:

$securityProvider = new \Sinbadxiii\PhalconFoundationAuth\Providers\SecurityProvider();
$securityProvider->register($di);

$cookieProvider = new \Sinbadxiii\PhalconFoundationAuth\Providers\CookiesProvider();
$cookieProvider->register($di);

а в config иметь доступ к настройкам cache, например Phalcon Redis Adapter

'cache' => [
        'default' => 'redis',
        'options' => [
            'options' => [
                'defaultSerializer' => 'Json',
                'scheme' => 'tcp',
                'host'   => '127.0.0.1',
                'port'   => 6379,
                'lifetime' => 3600,
            ],
        ]
    ]

License

The MIT License (MIT). Please see License File for more information.