我有一个使用 CakePHP 1.3 的 REST API 设置,它使用 Security 组件和 Auth 组件来促进用户登录的 HTTP 身份验证,如下所示:
用户控制器:
function beforeFilter() {
parent::beforeFilter();
$this->Auth->allow('view', 'add');
if ( $this->params['url']['ext'] == 'json' && !$this->Auth->user() ) {
$this->Auth->allow('edit', 'add_friend');
$this->Security->loginOptions = array(
'type'=>'basic',
'login'=>'authenticate',
'realm'=>'MyRealm'
);
$this->Security->loginUsers = array();
$this->Security->requireLogin('edit', 'add_friend');
}
}
应用控制器:
function authenticate($args) {
$data[ $this->Auth->fields['username'] ] = $args['username'];
$data[ $this->Auth->fields['password'] ] = $this->Auth->password($args['password']);
if ( $this->Auth->login($data) ) {
return true;
} else {
$this->Security->blackHole($this, 'login');
return false;
}
}
这一切都很好,但我的问题是我有一个方法可以选择是否进行身份验证。在我看来,CakePHP 中的 Security 组件具有requireLogin()
强制您进行身份验证的方法。
我尝试创建一个authenticate()
始终返回 true 的新方法:
function optionalAuthenticate($args) {
$data[ $this->Auth->fields['username'] ] = $args['username'];
$data[ $this->Auth->fields['password'] ] = $this->Auth->password($args['password']);
$this->Auth->login($data);
return true;
}
但不幸的是,这并没有奏效。
有谁知道我可以完成某种可选授权的安全组件的方法?