9月2日更新:
这已成为一个难以解决的难题。设置一个基本身份验证,这就是我想要的,应该只涉及很少的步骤。我做了很多测试,添加和删除代码,查看蛋糕手册,阅读教程,并逐步完成Mariano Iglesias的cakePHP 1.3应用程序开发手册 - 好书。 http://goo.gl/93BGw
但我仍然面临的问题是app控制器是“允许”操作的唯一工作地点。在单个控制器中,父:beforeFilter无法识别,我被重定向回用户登录页面。
对此的任何帮助都非常感谢。我想知道的是我如何调试这类问题。我应该看一下其他配置设置,比如'prefix routing'吗?
=======================
9月1日更新:
经过大量测试后,似乎问题是个别控制器中的'before:filter'无法识别。后控制器中的示例:
public function beforeFilter() {
parent::beforeFilter();
$this->Auth->allow = array('edit');
}
有没有人在此之前发生过这种情况?我已经提到了cakePHP手册以及许多在线文章和教程,它对我没有任何意义。我甚至试图用只有用户和后置控制器构建一个简单的应用程序,但仍然没有识别每个控制器中的before:filter设置。
======================= 原始问题。
我正在使用Cakephp auth组件来管理管理部分。这是使用版本1.3.11
我遇到的问题是即使每个控制器都允许操作,我也会被重定向到用户登录页面。
以下是app控制器中的内容:
class AppController extends Controller {
var $components = array(
'Auth' => array(
'authorize' => 'controller'
),
'Session',
'RequestHandler'
);
public function isAuthorized() {
return true;
}
function beforeFilter(){
$this->Auth->authorize = 'controller';
$this->Auth->fields = array('username' => 'username', 'password' => 'password');
$this->Auth->loginAction = array('controller' => 'users', 'action' => 'login');
$this->Auth->authError = 'Please login to view that page ';
$this->Auth->loginError =' The user name or password you entered did not work, please try again ' ;
$this->Auth->allow('display');
$this->Auth->loginAction = array('controller' => 'users', 'action' => 'login');
$this->Auth->logoutRedirect = array('controller' => 'users', 'action' => 'logout');
$this->Auth->loginRedirect = array('controller' => 'pages', 'action' => 'display', 'home');
}
这是用户控制器中的内容: class UsersController扩展了AppController {
var $name = 'Users';
function beforeFilter() {
parent::beforeFilter();
$this->Auth->allow = array('add');
}
这是帖子控制器中的内容:
class PostsController extends AppController {
var $name = 'Posts';
var $components = array('Session','RequestHandler', 'Email');
public function beforeFilter() {
parent::beforeFilter();
$this->Auth->allow = array('edit');
}
我找到的是,在我登录后,我可以按预期访问主页。然后当我进行注销时,会话没有完全被破坏,所以我可以回到'admin'部分。
我确实尝试过使用$ this-session('destroy');在注销操作中,但是当我执行时,允许的操作不再起作用。
这有意义吗?是否应该允许操作独立于当前会话?
谢谢,保罗
答案 0 :(得分:1)
对于注销的那个,我仍然可以访问管理部分:logout()应该有$this->redirect($this->Auth->logout());
它应该清除Auth会话数据。
以下是我对appcontroller中的beforeFilter()的建议:
function beforeFilter(){ $this->Auth->loginRedirect = array('controller' => 'users', 'action' => 'dashboard'); }
和页面控制器:$this->Auth->allow('display', 'view');
答案 1 :(得分:1)
确保您没有在任何元素或视图中使用requestAction,确保也允许requestAction调用的操作....这应该修复它。