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