0

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

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

  1. 检测用户是否已经登录到第三方应用程序。
  2. 如果是,自动将它们登录到 CakePHP 应用程序(在本例中为 jSlate)。
  3. 如果不是,则重定向到第三方应用程序登录屏幕。

是否有按照这些思路进行 CakePHP 身份验证的教程?或者有人知道怎么做吗?我已经想出了如何做第 3 部分,但是如果没有第 1 部分和第 2 部分,这种行为是没有用的......

4

1 回答 1

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 应用程序。您只需要定义一个可以重定向回的可公开访问的操作(无需身份验证)。在该操作中,您检查所需的所有令牌,然后可以“手动”验证用户:

$user = $this->User->find(/* find your Cake user by some id */);
if ($user) {
    $this->Auth->login($user['User']['id']);
}

恭喜,用户现在已经登录,就像他使用登录表单并拥有有效的 Cake 会话一样。

于 2012-07-06T09:51:12.673 回答