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

Posted

技术标签:

【中文标题】有没有一种简单的方法可以从 CakePHP 的视图中获取 AuthComponent 用户数据?【英文标题】:Is there an easy way to get AuthComponent user data from a view in CakePHP? 【发布时间】:2009-05-30 06:38:21 【问题描述】:

根据 cakebook 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');

【问题讨论】:

【参考方案1】:

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

$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');

【讨论】:

谢谢。这正是我想要的。 你应该在 CakePHP 2.x 中使用这个语法 $userdata = $this->session->read('Auth.User'); $username = $this->session->read('Auth.User.username'); 注意:至少在Cakephp 2.7 中是不行的,它必须是$this->Session .... session 中的s 必须是大写的【参考方案2】:

查看 CakePHP 手册中的 AuthComponent-Methods....

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

$this->set('username', $this->Auth->User('username'));

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

【讨论】:

【参考方案3】:

在你的 AppController 中添加一个方法

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

然后您可以通过 $userDetails 从您的视图和/或布局中访问它

【讨论】:

【参考方案4】:

要在视图中访问 Auth 变量,只需这样做:

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

【讨论】:

以上是关于有没有一种简单的方法可以从 CakePHP 的视图中获取 AuthComponent 用户数据?的主要内容,如果未能解决你的问题,请参考以下文章

CakePHP4 Ajax:从控制器发送到视图

如何从 CakePHP 中的 URL 字符串获取连接的路由?

如果图像不存在,则 cakephp 占位符

CakePHP:保存从 MySQL 视图加载的模型

CakePHP 从不同视图登录

有没有一种简单的方法可以在 Android 视图的顶部和底部添加边框?