cakephp - $ this-> Auth-> user()有时返回$ user ['User'] ['user'] ['id']和其他时间$ user ['user'] ['id']

时间:2013-11-28 21:46:08

标签: php cakephp

使用时

$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登录是否可能导致这种不同的结果?

1 个答案:

答案 0 :(得分:2)

所以

$this->Auth->login($user)
如果您希望Auth会话数据始终位于该结构中,那么

是一个坏主意,因为它来自login()本身。 而且你已经知道它增加了一个额外的“用户”键。 所以你需要做的就是调试()$ user数据,你会发现它需要

$this->Auth->login($user['User'])

PS:顺便说一句,它也记录在食谱中。当你查看源代码时,还要在代码中。