5

我正在从 CakePHP 1.3 迁移到 CakePHP 2.2.2,并希望将基本 Http 身份验证用于简单的管理区域。我只是无法让它工作,我认为我在文档中理解了一些错误。

从我了解到的文档中,我必须做类似的事情

public $components = array(
    'Auth' => array(
      'authenticate' => array(
        'Basic'
      ),
      'authError' => 'You may not access this area.',
      'authorize' => array('Controller')
    )
  );

我知道我需要进一步扩展 BaseAuthenticate 组件以返回有效的用户日期,但即使使用上述配置,我也希望浏览器的 Http 访问对话框会在弹出窗口中打开。但是不会发生这种情况,而是将我重定向到不存在的 /users/login 。为什么我需要 Http Access 的登录视图?我很困惑。

4

1 回答 1

7

Auth组件添加到您的控制器(或添加到AppController

class ThingsController extends AppController {  
    var $components = array('Auth');
}

CakePHP 需要一个登录动作,所以即使你使用 Basic 身份验证,其中 HTTP 代理负责 UI 收集身份验证详细信息,你也需要在一些控制器中指定一个动作来处理登录(在 Basic 情况下,它将WWW-Authenticate: Basic如果用户尚未通过身份验证,则发送标头)。

您可以设置AuthCompoment's $loginAction,但这默认(建议不要打破约定)loginUsersController. 因此,首先在 处创建一个空模板View/Users/login.ctp,然后将以下内容添加到您的UsersController

class UsersController extends AppController {

    public $components = array(
        'Session',
        'Auth' => array(
            'authenticate' => array('Basic')
        )
    );

    public function login() {
        if ($this->Auth->login()) {
            return $this->redirect($this->Auth->redirect());
        } else {
            $this->Session->setFlash('Not able to login');
        }
    }

    public function logout() {
        $this->redirect($this->Auth->logout());
    }

}
于 2012-09-25T18:00:38.283 回答