Git Product home page Git Product logo

yii2esia's Introduction

ESIA Authclient

Расширение для Yii2 для авторизации через портал госуслуг. Реализована только авторизация и получение базовых данных (personInfo)

Установка

Запустить

php composer.phar require --prefer-dist heggi/yii2-esia "*"

Или добавить

"heggi/yii2-esia": "*"

в секцию require вашего файла composer.json.

Настройка

В файле конфигурации (frontend/config/main.php или config/web.php) добавить

return [
    'components' => [
        ...
        'authClientCollection' => [
            'class' => 'yii\authclient\Collection',
            'clients' => [
                ...
                'esia' => [
                    'class' => 'heggi\yii2esia\Esia',
                    'clientId' => 'xxx',
                    'certPath' => __DIR__ . '/xxx.pem',
                    'privateKeyPath' => __DIR__ . '/xxx.key',
                    'privateKeyPassword' => 'xxx',
                    'scope' => 'fullname',
                    'production' => false,
                ],
                ...
            ],
        ],
        ...
    ]
]
        

Указать верные clientId, certPath, privateKeyPath, privateKeyPassword.

'production' => false для подключения к тестовой среде ESIA.

В контроллере SiteController.php

public function actions() {
    return [
        ...
        'auth' => [
            'class' => 'yii\authclient\AuthAction',
            'successCallback' => [$this, 'ssoCallback'],
        ],
        ...
    ];
}

public function ssoCallback($client) {
    $attributes = $client->getUserAttributes();
    $oid = $attributes['oid'];

    $user = User::findByOid($oid);
    if($user) {
        return Yii::$app->user->login($user);
    }

    $personInfo = $client->getPersonInfo($oid);
    $user = new User();
    $user->oid = $oid;
    $user->first_name = $personInfo['firstName'];
    $user->last_name = $personInfo['lastName'];
    $user->middle_name = $personInfo['middleName'];
    if(!$user->save()) {
        throw new yii\web\ServerErrorHttpException('Внутренняя ошибка сервера');
    }

    Yii::$app->user->login($user);
}

В файл views/layouts/main.php добавить ссылку для авторизации

<?= Html::a('Войти через госуслуги', ['site/auth', 'authclient' => 'esia']) ?>

или использовать виджет

<?= yii\authclient\widgets\AuthChoice::widget([
    'baseAuthUrl' => ['site/auth'],
    'popupMode' => false,
]) ?>

Полезные ссылки

Сайт госуслуги

Информация про подключение

yii2esia's People

Stargazers

Aleksandr Litvinov avatar

Watchers

James Cloos avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.