我收回了一个cakephp应用程序的维护,但我从未成为蛋糕开发者,我只是遇到了我的第一个问题。
目前用户使用简单的表单登录,它非常简单,如下所示:
$this->Auth->authenticate = array('Form' => array('userModel'=> .....
每当我尝试访问受保护的页面时,我都会被重定向到实现此登录表单的页面,这完全没问题,我对此没有任何问题。
但是,我有不同的客户端需要不同的身份验证格式" (如果我可以说),有些人想要Ldap身份验证,有些人想要openId身份验证,有些人想要CAS身份验证......
我设法为每个"系统"创建了一个有效的身份验证。通过扩展" BaseAuthenticate"并实现我的逻辑以连接到应用程序。
让我们以OpenId为例(在cakephp书中对此进行了一些解释,并以我为基础:http://book.cakephp.org/2.0/en/core-libraries/components/authentication.html)。我在app / controller / component / auth中创建了我的OpenIdAuthenticate,实现了该方法,...
在书中,我选择openId作为"主要认证"是我的appController:
$this->Auth->authenticate = array(
AuthComponent::ALL => array('userModel' => 'Member'),
'OpenId',
'Form'
);
对于CAS,我与Cas相同而不是OpenId,每当我尝试访问受保护的页面时,我都会重定向到我的cas服务器,在那里我自己登录并且我已经登录了蛋糕应用程序(所以没问题)。
我还在我的用户控制器中创建了另一种方法,以防外部身份验证被破坏(如果我们遇到任何问题,可能仍然需要记录我们自己进行维护)。 为此我创建了一个adminLogin方法(+ ctp视图文件),其中我强迫"通过执行以前编写的原始表单身份验证:
public function adminLogin() {
$this->Auth->authenticate = array('Form' => array('userModel'=> .....
if ($this->request->is('post')) {
//rest of the logic
}
}
每当我查询uri / users / adminLogin时,我都会使用经典身份验证系统并通过绕过外部身份验证访问所有受保护的页面。
第一个问题:是否建议做类似的事情?唯一的目标是只要我们的数据库启动(如果是)
就可以访问应用程序的内容现在我仍然没有找到解决方案。正如我所说,我有不同的客户有不同的需求,我不想为客户端X托管经典版本,为Y的OpenId和Z的Ldap托管。我希望在任何地方使用相同的应用程序,它将由客户使用他想要使用的任何系统。
这意味着,我希望能够动态更改身份验证方法。我想做的是创建一个页面(显然只适用于管理员),它可以在所有支持的系统之间进行选择并配置系统。
例如,我选择Ldap,我将不得不提供ip,端口,读取suer和pwd,DN,过滤器等....如果我选择cas,url,port,...(你了解)。
当我按下提交按钮时,我的身份验证系统已更改(adminLogin页面除外)。
我希望你能帮助我找到一种方法。当我点击提交时,我尝试创建一个全局变量
Configure::write('SystemUsed','LDAP');
在myFilter()的appController中,我试着这样做:
if (Configure::read('SystemUsed') == 'LDAP') {
$this->Auth->authenticate(...);
else if (Configure::read('SystemUsed') == 'OpenId') {
$this->Auth->authenticate(...);
}
等。但它没有用,变量在提交后变为空,它看起来不是一个干净的方法。
有人能帮助我吗?
先谢谢:)(对不起,如果太长)