5

我正在从CakePHP 1.3迁移到CakePHP 2.2.2并希望对简单管理区域使用基本Http身份验证。我只是无法使其工作,我认为我在文档中理解错误。CakePHP 2基本身份验证验证

从文档我明白我必须做一些像

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

据我所知,还我需要延长BaseAuthenticate组件返回有效用户的日期,但即使有上述的配置我会想到的是,浏览器的Http Access对话框将在一个弹出窗口中打开。但是没有发生这种情况,而是我被重定向到/ users /不存在的登录名。为什么我需要Http Access的登录视图?我很困惑。

回答

7

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

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

CakePHP的需要登录动作,所以即使你使用基本身份验证,该HTTP代理负责用户界面要收集验证细节,您需要在某个控制器中指定一个操作来处​​理登录(在基本情况下,如果用户尚未验证,它将发送WWW-Authenticate: Basic标题)。

您可以设置AuthCompoment$loginAction,但这个默认值(和建议不打破惯例)在UsersControllerlogin方法。因此,首先在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()); 
    } 

} 
+0

谢谢你,成功了! –