我有一个CakePHP应用程序,它既有可公开访问的部分,也有需要身份验证的部分。需要身份验证的所有控制器都继承自以下控制器:
class AuthenticatedController extends AppController {
public $components = array(
'Cookie',
'Auth' => array(
'authenticate' => array(
'Form' => array(
'fields' => array('username' => 'email_address')
)
),
'loginRedirect' => array('controller' => 'Articles', 'action' => 'index'),
'logoutRedirect' => array('controller' => 'Pages', 'action' => 'index')
)
);
// authentication issues
public function login() {
if ($this->request->is('post')) {
if (!$this->Auth->login()) {
// redirect
return $this->redirect(array('controller' => 'Articles', 'action' => 'index'));
} else {
$this->Session->setFlash(__('Username or password is incorrect'), 'default', array(), 'auth');
}
}
}
public function logout() {
$this->redirect($this->Auth->logout());
}
}
出于某种原因,当我尝试通过网络访问它们时,某些控制器将根据需要重定向到用户/登录。其他人不会 - 他们完全可以访问,即使他们从AuthenticatedController继承。
可能出现什么问题?
答案 0 :(得分:1)
您不需要创建两种不同类型的控制器
只需为您的所有应用程序创建身份验证(以便在AppController中进行配置)
然后在每个需要公共访问权限的控制器中
$this->Auth->allow('*');
或
$this->Auth->allow();
在beforeFilter
函数
这取决于你的蛋糕版本(总是记得指定你的确切版本)