代码之家  ›  专栏  ›  技术社区  ›  Horatio Alderaan

有没有一种简单的方法可以从cakephp的视图中获取AuthComponent用户数据?

  •  7
  • Horatio Alderaan  · 技术社区  · 15 年前

    根据记录 section on the Auth component ,我可以使用以下用户控制器实现简单的身份验证:

    class UsersController extends AppController {
    
        var $name = 'Users';    
        var $components = array('Auth'); // Not necessary if declared in your app controller
    
        /**
         *  The AuthComponent provides the needed functionality
         *  for login, so you can leave this function blank.
         */
        function login() {
        }
    
        function logout() {
            $this->redirect($this->Auth->logout());
        }
    }
    

    我希望能够在我的视图中显示如下内容:

    <?php
       $username = $auth->user('username');
       echo "Welcome " . $username;
    ?>
    

    有没有一个简单的方法可以做到这一点,或者我需要覆盖登录功能并将用户名存储到会话中?

    更新

    Alexander's answer 正是我想要的。但是,我将添加以下内容,以防其他人像我一样感到困惑。

    我花了一段时间才理解,如果您更改了auth使用的模型(例如,您可能有一个“persons”表而不是“users”),那么您需要使用如下内容:

    $persondata = $session->read('Auth.Person');
    
    4 回复  |  直到 11 年前
        1
  •  12
  •   Alexander Morland    11 年前

    实际上,这些信息很容易从会话中获得。您可以使用会话助手来获取它。我认为正确的语法是:

    $userdata = $session->read('Auth.User');
    $username = $session->read('Auth.User.username');
    

    编辑:

    对于cakephp 2.x,语法是:

    $userdata = $this->session->read('Auth.User');
    $username = $this->session->read('Auth.User.username');
    
        2
  •  3
  •   Vince    15 年前

    查看cakephp手册中的authcomponent方法….

    用户从会话登录后,可以通过$this->auth->user()访问用户信息。因此,如果您想要用户名,只需在控制器中使用它。

    $this->set('username',$this->auth->user('username'));

    您现在可以在视图中使用$username。

        3
  •  2
  •   unicorn_crack    15 年前

    在AppController中添加方法

    function beforeFilter() {
    $ath = $this->Auth->user();
    $this->set('userDetails', $ath['User']);
    }
    

    然后您可以通过$userdetails从视图和/或布局访问它。

        4
  •  0
  •   gomflo    15 年前

    要访问视图中的auth vars,只需执行以下操作:

    echo $session->read('Auth.User.id');