CakePHP 2基本身份验证验证
问题描述:
我正在从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的登录视图?我很困惑。
答
的Auth
组件添加到您的控制器(或到AppController
)
class ThingsController extends AppController {
var $components = array('Auth');
}
CakePHP的需要登录动作,所以即使你使用基本身份验证,该HTTP代理负责用户界面要收集验证细节,您需要在某个控制器中指定一个操作来处理登录(在基本情况下,如果用户尚未验证,它将发送WWW-Authenticate: Basic
标题)。
您可以设置AuthCompoment
的$loginAction
,但这个默认值(和建议不打破惯例)在UsersController
的login
方法。因此,首先在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());
}
}
谢谢你,成功了! –