Skip to content
AntonShevchuk edited this page Oct 6, 2014 · 17 revisions

Описание

В систему изначально закладывается универсальная система авторизации, которая предусматривает подключение нескольких провайдеров для одного пользователя. Для обеспечения подобного функционала у нас существует таблица auth:

auth
----
userId      - link to users table
provider    - provider name, "equals" for login/pass
foreignKey  - foreign key, user login for login/pass; twitter id; etc
token       - token to access, hash for login/pass
tokenSecret - secret token, salt of hash for login/pass (by default)
tokenType   - can be "request" or "access"
created
updated

Система авторизации login/password полностью есть в скелетоне, см. Application\Auth\Table.

Настройки

Пример настроек для использования авторизации через базу данных, facebook или twitter:

// auth.php
return array(
    "equals" => array(
        "encryptFunction" => function ($password, $salt) {
            return md5(md5($password) . $salt);
        }
    ),
    "facebook" => array(
        "appId" => "%%appId%%",
        "secret" => "%%secret%%",
    ),
    "twitter" => array(
        "consumerKey" => "%%consumerKey%%",
        "consumerSecret" => "%%consumerSecret%%"
    )
);

Использование

с версии 0.6.0 изменился способ вызова - теперь только через Proxy

Модуль:

class Row extends \Bluz\Auth\AbstractRow
{
}

class Table extends \Bluz\Auth\AbstractTable
{
    public function authenticateEquals($username, $password)
    {
        $authRow = $this->checkEquals($username, $password);

        // get user profile
        $user = Users\Table::findRow($authRow->userId);

        // try to login
        $user->login();
    }

    public function checkEquals($username, $password)
    {
        $authRow = $this->getAuthRow(self::PROVIDER_EQUALS, $username);

        if (!$authRow) {
            throw new AuthException("User not found");
        }

        // encrypt password
        $encrypt = $this->callEncryptFunction($password, $authRow->tokenSecret);

        if ($encrypt != $authRow->token) {
            throw new AuthException("Wrong password");
        }

        // get auth row
        return $authRow;
    }
}

В контроллере авторизации:

// login/password
Auth\Table::getInstance()->authenticateEquals($login, $password);

Если вам необходимо проверить авторизирован ли пользователь без привязки к его привилегиям:

use Bluz\Proxy\Auth;
if ($identity = Auth::getIdentity()) {
    // all ok
}
Clone this wiki locally