-
Notifications
You must be signed in to change notification settings - Fork 39
Auth
В систему изначально закладывается универсальная система авторизации, которая предусматривает подключение нескольких провайдеров для одного пользователя. Для обеспечения подобного функционала у нас существует таблица 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
}
Acl
Application
Auth
Cache
Common
— Exception
— Collection
— Container
— Helper
— Options
— Singleton
Config
Controller
— Data
— Mapper
—— Crud
—— Rest
— Reflection
Crud
— Crud Table
Db
— Row
— Table
— Relations
— Query
Debug
EventManager
Grid
Http
Layout
Logger
Mailer
Messages
Nil
Proxy
Registry
Request
Response
Router
Session
Translator
Validator
View