疑难解答Cakephp auth组件不允许允许的操作

时间:2011-08-29 04:27:47

标签: session cakephp authentication

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');在注销操作中,但是当我执行时,允许的操作不再起作用。

这有意义吗?是否应该允许操作独立于当前会话?

谢谢,保罗

2 个答案:

答案 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调用的操作....这应该修复它。