【问题标题】:Fatal error: Call to a member function user() on boolean致命错误:在布尔值上调用成员函数 user()
【发布时间】:2016-12-31 15:22:31
【问题描述】:

我必须在 view 中使用 loggedIn 用户数据,因此在 AppController 中的 beforeRender 函数中创建一个变量 AUTH_USER。 p>

82     public function beforeRender(Event $event)
83     {
84          if ($this->Auth->user('id')) {
85          $this->set('AUTH_USER', $this->Auth->user());
86          }
87          ...
88          ...
89     }

每当出现错误时,它不会显示实际错误,而是显示没有样式格式的以下错误

Fatal error: Uncaught Error: Call to a member function user() on boolean in /path_to_app/src/Controller/AppController.php:84 
Stack trace: #0 /path_to_app/src/Controller/ErrorController.php(54): App\Controller\AppController->beforeRender(Object(Cake\Event\Event)) 
#1 /path_to_app/vendor/cakephp/cakephp/src/Event/EventManager.php(422): App\Controller\ErrorController->beforeRender(Object(Cake\Event\Event)) 
#2 /path_to_app/vendor/cakephp/cakephp/src/Event/EventManager.php(391): Cake\Event\EventManager->_callListener(Array, Object(Cake\Event\Event)) 
#3 /path_to_app/vendor/cakephp/cakephp/src/Event/EventDispatcherTrait.php(78): Cake\Event\EventManager->dispatch(Object(Cake\Event\Event)) 
#4 /path_to_app/vendor/cakephp/cakephp/src/Controller/ in /path_to_app/src/Controller/AppController.php on line 84

删除行 84 - 86 显示实际错误

编辑 2

在 AppController initialize() 中加载 Auth 组件的代码

我编写了以下代码来加载AUTH 组件。

$this->loadComponent('Auth', [
   'authenticate' => [
      'Form' => [
         'userModel' => 'Admins',
            'fields' => [
               'username' => 'email', 
               'password' => 'password'
             ]
         ]
      ],
      'loginAction' => [
         'controller' => 'Admins',
         'action' => 'index'
      ],
      'loginRedirect' => [
         'controller' => 'Admins',
         'action' => 'contentList'
       ],
      'authError' => 'Did you really think you are allowed to see that?',
      'logoutAction' => [
         'controller' => 'Pages',
         'action' => 'home'
       ]
]);

【问题讨论】:

  • 您在加载组件时缺少]

标签: cakephp fatal-error cakephp-3.3


【解决方案1】:

我遇到了同样的错误,如果您将此行添加到 beforeRender() 它应该可以工作:

$this->loadComponent('Auth');

可能是您没有正确初始化 initialize() 函数中的组件。

【讨论】:

  • 如果用户的数据已经存在于Auth 会话中。为什么要再次从数据库中获取?这可能很容易受到攻击,因为在获取用户记录、密码和其他隐藏数据时也会被检索到。此外,由于代码在AppController 中,因此每次发送到服务器的http 请求都会检索loggedIn 用户数据。
  • 即使在我根据您的回答相应地更改了我的代码之后,仍然存在错误。错误在线if (!empty($this->Auth->user('id')))
  • 你是在initialize()函数中加载“Auth”组件吗?
  • 我已经编辑了我的问题。可以看到我写的加载AUTH组件的代码
  • 如果在 if 语句之前的第 84 行添加 $this->loadComponent('Auth'); 会发生什么?
【解决方案2】:

您没有为要检查的 if 语句提供正确的 ID。您必须通过函数的参数发送登录用户的 ID,然后在 if 语句中检查该 ID。

【讨论】:

  • 即使删除 if 语句也会在 $this->set('AUTHUSER', $this->Auth->user()); 处出错;
  • 即使用户登录也会出现这个错误吗?
猜你喜欢
  • 2015-11-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-07
相关资源
最近更新 更多