9月2日更新:故障排除CakePHP的权威性组件不允许允许的操作
这已成为一个非常困难的难题解决。建立一个基本的认证,这是我想要的,应该涉及很少的步骤。我做了很多测试,添加和删除代码,审查蛋糕手册,阅读教程,并逐步通过Mariano Iglesias的CakePHP 1.3应用程序开发菜谱 - 一本好书。 http://goo.gl/93BGw
但我仍然面临的问题是应用程序控制器是'允许'操作工作的唯一地方。在单独的控制器中,parent:beforeFilter没有被识别,我被重定向回到用户登录页面。
任何与此有关的帮助真的很感激。我想知道的是如何调试这种类型的问题。有没有其他的配置设置我应该看看,比如'前缀路由'?
=======================
9月1日更新:
大量的测试似乎是这个问题后,在个别控制器中的“之前:过滤器”未被识别。后控制器中的示例:
public function beforeFilter() {
parent::beforeFilter();
$this->Auth->allow = array('edit');
}
有没有人有过这种情况?我已经提到了CakePHP手册以及许多在线文章和教程,它对我没有任何意义。我甚至试图用只有用户和后控制器构建一个简单的应用程序,但仍然没有识别每个控制器中的before:filter设置。
======================= 原始问题。
我正在使用Cakephp身份验证组件来管理管理部分。这是使用版本1.3.11
我遇到的问题是,即使在每个控制器允许的操作,我被重定向到用户登录页面。
这里是什么在应用程序控制器:
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');
}
这是什么在用户控制器: 类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');
}
我发现的是,已经登录我可以像预期的那样访问主页。然后当我去注销时,会话并没有被完全销毁,所以我可以回到'管理'部分。
我曾尝试使用$ this-session('destroy');在注销操作中,但是当我执行了允许的操作时不再工作。
这是否有意义?不允许的行为是否独立于当前会话?
谢谢,保罗
嗯,你能添加关于你的注销操作的任何细节吗? – mtnorthrop
尝试设置登录和注销重定向并再试一次 $ this-> Auth-> loginAction = array('controller'=>'users','action'=>'login'); $ this-> Auth-> logoutRedirect = array('controller'=>'users','action'=>'logout'); $ this-> Auth-> loginRedirect = array('controller'=>'posts','action'=>'add'); – 8vius
嗨8vius,我试过这个,并没有问题的区别。在我的测试中,我发现如果在app_controller中允许所有这样的操作,$ this-> Auth-> allow('*');那么所有的动作都被授权,但是如果我只授权'索引'然后在单独的控制器中授权其他类似这样的方法,\t public function beforeFilter(){0} {0}}}}} \t \t $ this-> Auth-> allow = array('view','aboutUs'); \t \t},它们不被识别,我被重定向到用户登录页面。所以问题仍然是控制器中的parent:beforeFilter不起作用。想法? – Paul