使用时
$user = $this->Auth->user();
获取有关当前登录用户的详细信息,有时返回的数组如下:
> user
> User
> Office
Message
和其他时间:
> user
id
name
> Office
这很烦人,因为在我的视图中我输出了用户名,有时候因为额外的['用户'而在数组中是一个额外的级别,有时它不是。
如何控制或了解我如何知道预期的版本?
感谢
EDIT 这是我的登录操作
public function login() {
$this->layout = 'loginlayout';
if ($this->request->is('post')) {
if ($this->Auth->login()) {
// did they select the remember me checkbox? - http://stackoverflow.com/questions/12447487/cakephp-remember-me-with-auth
if ($this->request->data['User']['remember_me'] == 1) {
// remove "remember me checkbox"
unset($this->request->data['User']['remember_me']);
// hash the user's password
$this->request->data['User']['password'] = $this->Auth->password($this->request->data['User']['password']);
// write the cookie
$this->Cookie->write('remember_me_cookie', $this->request->data['User'], true, '4 weeks');
}
return $this->redirect($this->Auth->redirectUrl());
} else {
$this->Session->setFlash(('Username or password is incorrect'));
}
}
}
另外在我的应用程序控制器的过滤器之前我有:
if (!$this->Auth->loggedIn() && $this->Cookie->read('remember_me_cookie')) {
$cookie = $this->Cookie->read('remember_me_cookie');
$user = $this->User->find('first', array(
'conditions' => array(
'User.email' => $cookie['email'],
'User.password' => $cookie['password']
)
));
if ($user && !$this->Auth->login($user)) {
$this->redirect('/users/logout'); // destroy session & cookie
}
}
通过cookie登录是否可能导致这种不同的结果?
答案 0 :(得分:2)
所以
$this->Auth->login($user)
如果您希望Auth会话数据始终位于该结构中,那么是一个坏主意,因为它来自login()本身。 而且你已经知道它增加了一个额外的“用户”键。 所以你需要做的就是调试()$ user数据,你会发现它需要
$this->Auth->login($user['User'])
PS:顺便说一句,它也记录在食谱中。当你查看源代码时,还要在代码中。