无法检查用户是否从用户以外的任何控制器登录

时间:2011-03-14 19:43:52

标签: cakephp

我正在创建一个用户个人资料页面,如果我像这样路由

 Router::connect('/users/profile', array('controller' => 'users', 'action' => 'profile'));

然后$ this-> Auth-> user()在UsersController->个人资料()中运行正常但是如果它像这样

Router::connect('/pages/profile', array('controller' => 'pages', 'action' => 'profile'));

然后它不在PagesCotroller-> profile()中,两种情况下的配置文件功能相同

我的app控制器:

 class AppController extends Controller {
     var $components = array(
         'Auth' ,
         'Acl',
         'Session',
         'Cookie'
     );
     var $userdata = array();
     function beforeFilter(){
             $this->Auth->userModel = 'Users';

         $this->Auth->loginRedirect = array();
         $this->Auth->allow('display');
             $this->Auth->allow('index');

             var_dump($this->Auth->user());
             parent::beforeFilter();
     }
     function isAuthorized() {
        return true;
     }


}

和var_dump实际上如果我去/ users / profile并且如果我去/ pages / profile则不行 没有任何额外的登录或任何

$ this-> Auth-> allow()顺便在两个控制器中正常工作,因此Auth组件可用于

这是pagescontroller

class PagesController extends AppController {
        var $components = array('RequestHandler');
    var $name = 'Pages';
    var $helpers = array('Html', 'Session','Form','Ajax', 'Jquery');

    var $uses = array('Users');

        function beforeFilter() {
            parent::beforeFilter();
            $this->Auth->allow('profile');
        }

        function beforeRender() {
            parent::beforeRender();

        }

        function profile(){

                var_dump($this->Auth->user());
        }
}

3 个答案:

答案 0 :(得分:1)

尤金,

我想知道为什么你会尝试实现这样的目标。 第一条路线已经存在,因此无需设置一条路线。 第二条路线似乎(imho)违反惯例。页面控制器用于提供或多或少的静态页面,因此我不希望看到它被路由到一个动作。

我的两分钱。

<强> Edit0: 在您的第一次评论之后,您的意图现在更加明显:

if ($this->Session->read(Auth.User)) ...

page中的类似内容,可能作为元素。只需通过debug()查看您在视图/页面中可以阅读的值。

<强> EDIT1:

  1. 从中下载并安装debug_kit github上。
  2. 如果会话助手是 在pages_controller.php中启用, 那么你应该能够达到 你的目标。
  3. <强> EDIT2:

    您可以检查会话是否在除用户之外的其他视图中可见。但是你应该明确地知道,在以复数和表格命名模型时,你正在破坏CakePHP的约定。不幸的是,我不能告诉你atm这是否与手头的情况有关,但我肯定会努力摆脱它。

    debug_kit是否显示AUTH组件?

答案 1 :(得分:1)

我发现答案是验证码组件。它每次调用时都会启动会话,并且除了用户之外,它会从所有控制器调用。因此,用户登录数据未被保留。

答案 2 :(得分:0)

我想知道var $ uses = array('Users'); 用户应该是单数,用户

如果这不能解决它...无论如何都要保持单数,因为你正在调用'用户'模型。