【发布时间】:2010-07-01 15:04:39
【问题描述】:
这似乎是一个两步的过程,
$u = $this->Auth->user();
$uid = $u['User']['id'];
用户登录后是否在某处设置了变量? (抱歉这个愚蠢的问题。)
【问题讨论】:
标签: cakephp
这似乎是一个两步的过程,
$u = $this->Auth->user();
$uid = $u['User']['id'];
用户登录后是否在某处设置了变量? (抱歉这个愚蠢的问题。)
【问题讨论】:
标签: cakephp
我认为你可以这样做 $uid = $this->Auth->user('id'); - 检查 api:http://api.cakephp.org/class/auth-component#method-AuthComponentuser
【讨论】:
在 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'];
还有更多的方法,这只是一些......
【讨论】:
CakeSession::read('Auth.User.id');。
试试这个:
$this->Auth->user('id')
【讨论】:
如果您无法使用 Auth 类,您还可以从会话中获取用户详细信息。
$this->Session->read('Auth.User.id')
【讨论】:
CakePhp 2.x:
任何地方:
AuthComponent::user('id')
在控制器内部:
$this->Auth->user('id');
【讨论】:
即使这个问题是在当前版本之前发布的,我也会在 Cakephp v4.x 中回答如何做,因为我只是需要它并且很难找到这个信息,它可能对其他人有用.
$identity = $this->request->getAttribute('authentication')->getIdentity();
现在,您有一个类似 IdentityInterface ORM 的对象,它从以您用来跟踪用户的 DB 表命名的对中返回值。因此,您可以从数据库中获取所有信息,例如:
$identity['email']
$identity['full_name']
$identity['id']
// etc
【讨论】:
这可能没用,但我遇到了由$this->Auth->user(); 引起的错误。这个问题是用这个来解决的。我不确定问题的出路,但它是在从模型中调用函数时出现的,与我使用 $this->Auth->user(); 的操作相同
使用AuthComponent::user('id') 解决了这些问题。
【讨论】:
$this->Session 已弃用
使用类似的东西
$session = $this->request->session();
$user_id = $session->read('Auth.User.id');
【讨论】:
$this->Session 已弃用,正如 Simon 上面所说,但现在 $this->request->session(); 也已弃用。
目前,截至 2021 年 8 月和 CakePhp 4,正确答案是:
$this->request->getSession()->read('User.id');
【讨论】: