我在将CakePHP应用程序(jSlate)集成到定制的非Cake Web应用程序时遇到问题。我见过的所有替代身份验证脚本只是改变了登录表单的行为,换句话说,登录表单仍然出现,并要求输入用户名和密码,但这些是针对替代源(例如LDAP)进行身份验证。
我真正想要的是根本没有登录屏幕。相反,我想要一个非常简单的行为:
是否有这些线路上的CakePHP认证教程?或者有人知道如何做到这一点?我已经弄清楚如何做第3部分,但如果没有第1部分和第2部分,这种行为就没用了......
答案 0 :(得分:1)
您可以将其放入AppController::beforeFilter
:
public function beforeFilter() {
if (!$this->Auth->user()) {
// if no user is currently logged in
if ($this->Cookie->read(...)) {
// or
if ($_COOKIE[...]) {
// or whatever else you want to detect
$this->redirect('http://some.external/login/service');
}
}
}
然后,这个外部登录服务可能会在某些时候用某种令牌将用户重定向回你的Cake应用程序。您只需要定义一个可以重定向回来的可公开访问的操作(不需要auth)。在该操作中,您检查所需的所有令牌,然后可以“手动”验证用户:
$user = $this->User->find(/* find your Cake user by some id */);
if ($user) {
$this->Auth->login($user['User']['id']);
}
恭喜,用户现在已登录,就像他使用了登录表单并拥有有效的Cake会话一样。