Быстрый лёгкий надёжный форумный движок
Вы не вошли.
Страницы 1
Публикую простенький "фреймворк", использующий аутентификацию форума fluxbb.
Скачать пример: https://rapidshare.com/files/505321830/fluxbb_auth.zip
Загляните в protected/config/main.php чтобы узнать как настроить на свой форум
Загляните в protected/classes/UserModel.php чтобы понять - я сделал заглушку реально надо читать из базы, конечно
Подразумевается, что нужная кука нам доступна, потому что мы читаем её в том же домене.
Сама аутентификация выглядит так:
<?php
class App extends Component
{
public $cookie;
public $userModel;
public $user;
public $timeout;
public function __construct(array $args = NULL)
{
parent::__construct($args);
$this->cookie = new Cookie(Registry::get('cookie_params'));
$this->userModel = new UserModel(Registry::get('user_params'));
$this->authenticate();
}
public function authenticate()
{
$now = time();
$authCookie = $this->cookie->getAuth();
if (!empty($authCookie) && preg_match('/^(\d+)\|([\da-fA-F]+)\|(\d+)\|([\da-fA-F]+)$/', $authCookie, $matches)) {
$userId = intval($matches[1]);
$hash1 = $matches[2];
$expire = intval($matches[3]);
$hash2 = $matches[4];
}
if (isset($userId) && $userId > 1 && $expire > $now) {
if (Security::hmac($userId.'|'.$expire, $this->cookie->seed.'_cookie_hash') != $hash2 ||
is_null($user = $this->userModel->getById($userId)) ||
Security::hmac($user['password'], $this->cookie->seed.'_password_hash') !== $hash1) {
$expire = $now + 31536000; // + 1 year
$this->cookie->setAuth(1, sha1(rand()), $expire);
} else {
$expire = ($expire > $now + $this->timeout)
? $now + 1209600 // + 2 weeks
: $now + $this->timeout; // + 30 minutes (by default)
$this->cookie->setAuth($user['id'], $user['password'], $expire);
$this->user = $user;
return TRUE;
}
}
$this->user = array('id' => 1, 'name' => 'Guest');
return FALSE;
}
}
Помоему метод authenticate() выглядит намнооого понятнее, чем оригинальный check_cookie(). Возможно это кому-то поможет в написании своего портала на базе флакс.
There are two hard things in computer science: cache invalidation, naming things, and off-by-one errors.
Offline
@artoodetoo, а можешь описать практическое примененение данной возможности?
Offline
Интеграция с чем угодно. Если тебе надо свести два разных движка на одном сайте, первая проблема - единая авторизации. Потом будут другие проблемы, но это первое.
Для справки:
Самый простой способ использовать авторизацию flux - подключить его include/common.php и потом прочитать $pun_user.
Мне такой способ не нравится, т.к. fluxbb создает переменные в глобальной области видимости и вообще подключится много лишнего, что в "стороннем" движке уже реализовано каким-то образом. Будет как минимум дублирование, а возможно и конфликты.
ПОЭТОМУ, я предлагаю OOP подход с нормальной изоляцией данных.
There are two hard things in computer science: cache invalidation, naming things, and off-by-one errors.
Offline
Страницы 1