Существует четыре альтернативы.
Отдельные сайты, отдельные домены, отдельные серверы, отдельная база данных
Самый безопасный способ сделать это - передать безопасный токен из другой системы в Agile Toolkit.,Токен должен содержать имя пользователя и хэш некоторой секретной парольной фразы вместе с этим именем пользователя $user.":".md5($secret.":".$user)
Вы можете проверить аргумент внутри класса API:
$this->auth=$this->add('YourAuth');
if($_GET['login_token'])){
list($user,$token)=explode($_GET['login_token']);
if(!verify_token($token))throw $this->exception('Break-in attempt');
$this->api->auth->login($user);
}
$this->auth->check();
Отдельный сайт, домен, но тот жедоступ пользователя
Вам потребуется создать такое же шифрование в классе Agile Toolkit Auth.К счастью, вы можете легко это сделать, переопределив encryptPassword
class MyAuth extends SQLAuth {
function encryptPassword($password,$salt=null){
return ....
}
}
Если вам нужно другое соединение с базой данных, вы также можете добавить:
function init(){
parent::init();
// Ouch, last occurrence of static method use!
$newdb=DBLite::connect(
$this->api->getConfig('user_dsn'));
$this->db=$newdb->dsql();
}
Совместное использование сеанса - тот же домен и тот же компьютер, но нет доступа к коду
Agile Toolkit использует область приложения в качестве имени.Это аргумент, который вы указываете конструктору при создании экземпляра приложения внутри index.php:
$api=new MyFrontend('myrealm');
Вам необходимо вызвать
session_name('myrealm');
session_start();
Затем вам нужно установить переменную сеансачто-то вроде myrealm_MyAuth_info, вы, вероятно, можете получить это, выгрузив содержимое $ _SESSION из Agile Toolkit.Вам нужно установить что-то вроде массива ('user' => 'john'), если это не "false", то все в порядке.
Совместное использование компьютера, домена, сессии и некоторого кода
Это похоже на предыдущий подход, но это должно быть проще сделать:
include 'yourapp/atk4/loader.php';
include 'yourapp/lib/Frontend.php';
$api = new Frontend();
$api->auth->login('john');
Это предполагает, что ваш класс "Frontend" правильно устанавливает "auth".Если это не работает, могут потребоваться некоторые настройки, например, вы можете захотеть переместить $ auth-> check () в функцию initLayout (), если вы вызываете ее из API.