授权的公共 URL 不断重定向以进行身份验证并失败



在这种情况下,OurCustomAuth当前返回的预期值为false,正在到达相应的其他值,但users/error路径不断重定向,即使它已公开并且不需要任何身份验证。

我已经设置了新操作:

C:wampmyappapp>Consolecake AclExtras.AclExtras aco_update
Welcome to CakePHP v2.4.9 Console
---------------------------------------------------------------
App : app
Path: C:wampmyappapp
---------------------------------------------------------------
Created Aco node: controllers/Users/error
Aco Update Complete

UsersController中,我添加了要公开的操作:

public function beforeFilter() {
parent::beforeFilter ();
$this->Auth->allow ('logout', 'error');
}

AppController中,Auth配置:

public $components = array(
'Acl',
'Cookie',
'DebugKit.Toolbar', 'Session',
'Auth' => array(
'authenticate' => array('OurCustomAuth'),
'loginAction' => array('controller' => 'users', 'action' => 'view'),
'authError' => 'Did you really think you are allowed to see that?',
'authorize' => array('Actions' => array('actionPath' => 'controllers'))
)
);
...
public function beforeFilter() {
...
//Auto logging users in if they are not logged in
if (!AuthComponent::user('id')) {
if ($this->Auth->login()) {
//stuff here
} else {
$this->Session->setFlash(__('We could not authenticate you ...'));
return $this->redirect(array('controller' => 'Users', 'action' => 'error'));
}
}
...
}

我在火狐中遇到的错误:

页面未正确重定向

Firefox 检测到服务器正在重定向请求 此地址永远不会完成。

更新 #1

$this->Auth->login()本质上是抓取请求标头,在这种情况下是故意错误的,这似乎重定向到适当的链接。但是,/users/error不应导致重定向,因为它已从身份验证中排除。

问题是您在每个请求上运行登录代码,即在应用程序控制器beforeFilter()方法中。因此,当该代码将您重定向到/users/error,因为您未登录,代码将再次针对该控制器/操作运行,并一次又一次地重定向您......

如果您需要为每个请求运行此代码,则必须手动检查允许的操作,即通过$this->Auth->allow()允许的操作,并且仅在不允许当前操作的情况下运行代码。检查AuthComponent::_isAllowed()的代码,您可以通过最少的修改轻松使用它:

$action = strtolower($this->request->params['action']);
if (!in_array($action, array_map('strtolower', $this->Auth->allowedActions))) {
//Auto logging users in if they are not logged in
if (!AuthComponent::user('id')) {
// ...
}
}

相关内容

  • 没有找到相关文章

最新更新