【问题标题】:How to set a $currentuser variable in CakePHP with global scope如何在 CakePHP 中使用全局范围设置 $currentuser 变量
【发布时间】:2014-01-07 05:42:45
【问题描述】:

我正在使用 CakePHP v2.4...

我想发出一个单独的数据库请求来设置一个我可以在所有控制器中引用的 $currentuser 变量。这似乎应该很容易,但这让我很难过,因为 $this->Auth->user() 在用户登录时在 AppController 的 beforeFilter 中不可用。因此,在有人登录后该变量将立即无用在(直到他们重新加载页面等)。 afterFilter() 和 beforeRender() 发生在 其他控制器操作之后,所以这不能解决我的问题。

这样做的正确方法是什么?

【问题讨论】:

    标签: php cakephp cakephp-2.0


    【解决方案1】:

    您不必进行其他查询,只需配置身份验证适配器即可为您获取数据:

    public $components = array(
        'Auth' => array(
            'authenticate' => array(
                'Form' => array(
                    'contain' => array(
                        // Whatever you want here
                        'Profile',
                        'Setting'
                    )
                )
            )
        )
    );
    

    您当前登录的所有用户数据都可以通过以下方式获得:

    $this->Auth->user()
    

    即使你不重定向,如果你这样做了,它仍然会在那里。

    您应该使用这种方式来访问用户数据而不是直接访问会话,因为用户组件正确地抽象了它。见:

    为什么 CakeSession::read() 不是最佳选择:

    如果您没有使用基于会话的身份验证系统 CakeSession::read("Auth.User");会破裂。如果 Auth 会话密钥由于某种原因发生更改,它也会中断,这不太可能但并非不可能。

    在这里调用静态 CakeSession::read("Auth.User") 方法也不是最佳实践。会话组件可以扩展,您仍然可以通过 $this->Session 使用别名访问自定义的 SessionComponent。

    总的来说,我会避免在我的方法中添加静态和单例 - 这使得测试或更改它们变得困难。我总是将它们包装在一个方法中。这样您就可以在测试中模拟它们。

    【讨论】:

    • 感谢您的解释!
    • 在视图中显示用户信息怎么办?您是先在方法中设置变量还是有其他建议?
    • 我在 beforeRender() 中设置了一个变量,$this->set('userData', $this->Auth->user());并使用助手来处理视图中的数据。 github.com/burzum/cakephp-user-tools/blob/develop/View/Helper/…
    【解决方案2】:

    我通过这种方式在我的应用中访问当前登录的用户:

    CakeSession::read("Auth.User");
    

    它在我的 AppController::beforeFilter() 中

    【讨论】:

    • 谢谢肖恩。如果在“当前用户”再次注销/登录之前用户对象以某种方式发生变化,您是否会遇到存储在会话中的数据变得“陈旧”的问题?
    • 我只是在任何用户对象更改后更新会话数据,检查一下:stackoverflow.com/questions/13440820/… 我不知道这是否是最有效的方式,但它可以根据需要工作
    【解决方案3】:
    $this->Session->read('Auth.User')
    

    这应该在所有这些位置以及视图中都可用。

    【讨论】:

      猜你喜欢
      • 2015-03-22
      • 2023-03-24
      • 1970-01-01
      • 2021-09-26
      • 2016-08-13
      • 2010-10-21
      • 2012-04-29
      • 2017-02-17
      相关资源
      最近更新 更多