【问题标题】:Cakephp - get user id in controller when using AuthCakephp - 使用 Auth 时在控制器中获取用户 ID
【发布时间】:2010-07-01 15:04:39
【问题描述】:

这似乎是一个两步的过程,

    $u = $this->Auth->user();
    $uid = $u['User']['id'];

用户登录后是否在某处设置了变量? (抱歉这个愚蠢的问题。)

【问题讨论】:

    标签: cakephp


    【解决方案1】:

    我认为你可以这样做 $uid = $this->Auth->user('id'); - 检查 api:http://api.cakephp.org/class/auth-component#method-AuthComponentuser

    【讨论】:

    • 您可以提供密钥 arg 的事实就在 API 中......我想我会更频繁地看看那里。
    【解决方案2】:

    在 CakePHP 中,有几种方法可以从会话中获取用户 ID,这里有几个例子

    要在控制器中获取会话用户 ID,请使用:

    $uid = $this->Auth->User('user_id');
    

    要在视图中获取会话用户 ID,请使用:(不推荐,我会在控制器中设置)

    $uid = $this->Session->read('Auth.User.id');
    

    要在模型中获取会话用户 ID,请使用:(不推荐,但一种解决方案)

    $uid = CakeSession::read('Auth.User.id');
    

    我不建议使用上述方法从模型中获取会话用户 ID,我会通过控制器传递它,使用:

    $this->Model->function($uid);
    

    您也可以通过纯 php 获取会话用户 id,使用:(尽管使用 Cake,您应该遵守约定)

    $uid = $_SESSION['Auth']['User']['id'];
    

    还有更多的方法,这只是一些......

    【讨论】:

    • 这是一个很好的答案,应该标记为已接受的答案
    • +1 建议从控制器传递到模型,而不是在模型中调用 CakeSession::read('Auth.User.id');
    【解决方案3】:

    试试这个:

    $this->Auth->user('id')
    

    【讨论】:

      【解决方案4】:

      如果您无法使用 Auth 类,您还可以从会话中获取用户详细信息。

      $this->Session->read('Auth.User.id')
      

      【讨论】:

      • 如果您没有在 AppController 级别注册 AuthComponent,这将很有帮助
      【解决方案5】:

      CakePhp 2.x:

      任何地方:

      AuthComponent::user('id')
      

      在控制器内部:

      $this->Auth->user('id');
      

      【讨论】:

        【解决方案6】:

        即使这个问题是在当前版本之前发布的,我也会在 Cakephp v4.x 中回答如何做,因为我只是需要它并且很难找到这个信息,它可能对其他人有用.

        $identity = $this->request->getAttribute('authentication')->getIdentity();
        

        现在,您有一个类似 IdentityInterface ORM 的对象,它从以您用来跟踪用户的 DB 表命名的对中返回值。因此,您可以从数据库中获取所有信息,例如:

        $identity['email']
        $identity['full_name']
        $identity['id']
        // etc
        

        【讨论】:

        • “你有点表明你没有使用 4.x 版”...你看到问题的日期了吗? ;-)
        • 天啊,不,我没有!哈哈!谢谢。刚刚编辑了我的答案。
        【解决方案7】:

        这可能没用,但我遇到了由$this->Auth->user(); 引起的错误。这个问题是用这个来解决的。我不确定问题的出路,但它是在从模型中调用函数时出现的,与我使用 $this->Auth->user(); 的操作相同 使用AuthComponent::user('id') 解决了这些问题。

        【讨论】:

          【解决方案8】:

          $this->Session 已弃用

          使用类似的东西

          $session = $this->request->session();
          $user_id = $session->read('Auth.User.id');
          

          【讨论】:

            【解决方案9】:

            $this->Session 已弃用,正如 Simon 上面所说,但现在 $this->request->session(); 也已弃用。 目前,截至 2021 年 8 月和 CakePhp 4,正确答案是:

            $this->request->getSession()->read('User.id');
            

            【讨论】:

              猜你喜欢
              • 2015-10-13
              • 2019-08-30
              • 2014-03-06
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2017-10-22
              • 2022-12-05
              相关资源
              最近更新 更多