如何绕过CakePHP应用程序(jSlate)中的登录屏幕?

时间:2012-07-06 09:35:01

标签: cakephp authentication autologin

我在将CakePHP应用程序(jSlate)集成到定制的非Cake Web应用程序时遇到问题。我见过的所有替代身份验证脚本只是改变了登录表单的行为,换句话说,登录表单仍然出现,并要求输入用户名和密码,但这些是针对替代源(例如LDAP)进行身份验证。

我真正想要的是根本没有登录屏幕。相反,我想要一个非常简单的行为:

  1. 检测用户是否已登录第三方应用。
  2. 如果是,请自动将它们登录到CakePHP应用程序(在本例中为jSlate)。
  3. 如果不是,请重定向到第三方应用登录屏幕。
  4. 是否有这些线路上的CakePHP认证教程?或者有人知道如何做到这一点?我已经弄清楚如何做第3部分,但如果没有第1部分和第2部分,这种行为就没用了......

1 个答案:

答案 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会话一样。