Login 如何将atk4登录与现有PHP应用程序集成
Atk4具有基本的登录功能,我可以使用Atk4、tmail模板等构建它来添加用户注册、忘记密码链接、电子邮件验证等。但是,如果我想将其与已经提供该功能的现有开源应用程序集成,我需要做什么才能允许系统登录,以便在登录到第三方应用程序后可以查看atk4保护的页面?有四种选择 独立的站点、独立的域、独立的服务器、独立的数据库 最安全的方法是将安全令牌从另一个系统传递到敏捷工具包。令牌应包含用户名和某些机密密码短语的哈希值,以及用户名Login 如何将atk4登录与现有PHP应用程序集成,login,frameworks,integration,atk4,Login,Frameworks,Integration,Atk4,Atk4具有基本的登录功能,我可以使用Atk4、tmail模板等构建它来添加用户注册、忘记密码链接、电子邮件验证等。但是,如果我想将其与已经提供该功能的现有开源应用程序集成,我需要做什么才能允许系统登录,以便在登录到第三方应用程序后可以查看atk4保护的页面?有四种选择 独立的站点、独立的域、独立的服务器、独立的数据库 最安全的方法是将安全令牌从另一个系统传递到敏捷工具包。令牌应包含用户名和某些机密密码短语的哈希值,以及用户名$user.:“.md5($secret.:”$user) 您可以检查
$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();
单独的站点、域,但具有相同的用户访问权限
您需要在敏捷工具包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();
}
共享会话-同一域和同一台计算机,但没有代码访问权限
敏捷工具包使用应用程序的领域作为名称。这是在index.php内创建应用程序实例时为构造函数指定的参数:
$api=new MyFrontend('myrealm');
你需要打电话
session_name('myrealm');
session_start();
然后您需要设置会话变量,比如myrealm\u MyAuth\u info,您可能可以通过从敏捷工具包中转储$\u会话的内容来实现这一点。您需要将其设置为类似于array('user'=>'john')的值,只要它不是“false”,就可以了
共享计算机、域、会话和一些代码
这与前面的方法类似,但应该更容易做到:
include 'yourapp/atk4/loader.php';
include 'yourapp/lib/Frontend.php';
$api = new Frontend();
$api->auth->login('john');
这假设“前端”类正确设置了“auth”。如果这不起作用,可能需要进行一些调整,例如,如果您是从API中调用它,您可能希望将$auth->check()移动到initLayout()函数中。我的意图是相同的域、相同的计算机、相同的会话、相同的数据库(以便用户表是通用的),但代码是分开的,并将从第三方应用程序链接到atk4页面。我将看看它是如何工作的,并在这里更新。谢谢