如何将atk4登录与现有的PHP应用程序集成

时间:2011-10-20 16:45:19

标签: login frameworks integration atk4

Atk4具有基本的登录功能,我可以使用atk4,tmail模板等来构建它以添加用户注册,忘记密码链接,电子邮件验证等。但是,如果我想将它与已经提供该功能的现有开源应用程序集成,我需要做些什么来允许允许系统登录,以便在登录第三方应用程序后可以查看atk4受保护的页面? / p>

1 个答案:

答案 0 :(得分:2)

有四种选择。

单独的站点,单独的域,单独的服务器,单独的数据库

最安全的方法是将安全令牌从其他系统传递到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使用Application的域名作为名称。这是您在index.php中创建应用程序实例时为构造函数指定的参数:

$api=new MyFrontend('myrealm');

您需要致电

session_name('myrealm');
session_start();

然后你需要设置会话变量,比如myrealm_MyAuth_info,你可以通过从Agile Toolkit转储$ _SESSION的内容来获得这个。你需要把它设置成像array('user'=>'john')这样的东西,只要它不是“假的”就可以了。

共享计算机,域,会话和一些代码

这与之前的方法类似,但应该更容易做到:

include 'yourapp/atk4/loader.php';
include 'yourapp/lib/Frontend.php';
$api = new Frontend();
$api->auth->login('john');

这假设您的“前端”类正确设置了“auth”。如果这不起作用,可能需要进行一些调整,例如,如果从API中调用它,可能需要将$ auth-> check()移动到initLayout()函数中。