Как интегрировать вход в atk4 с существующим приложением PHP - PullRequest
1 голос
/ 20 октября 2011

Atk4 имеет базовые функции входа в систему, и я мог бы создать его для добавления регистрации пользователя, ссылки на забытый пароль, подтверждения адреса электронной почты и т. Д. С использованием atk4, шаблонов tmail и так далее.Но если я хочу интегрировать его с существующим приложением с открытым исходным кодом, которое уже обеспечивает эту функциональность, что мне нужно сделать, чтобы разрешить вход в систему таким образом, чтобы страницы, защищенные atk4, можно было просматривать после входа в стороннее приложение?

1 Ответ

2 голосов
/ 20 октября 2011

Существует четыре альтернативы.

Отдельные сайты, отдельные домены, отдельные серверы, отдельная база данных

Самый безопасный способ сделать это - передать безопасный токен из другой системы в 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.

...