2012-03-18 61 views
0

我是cakephp的新手,并使用全新的2.1构建我的第一个项目。cakephp /不会在使用authComponent时在会话中存储所有用户数据

我使用身份验证和会话组件来构建简单的登录系统。一切正常。 我使用的表单身份验证,自定义请求的字段使用电子邮件作为登录。

当我尝试

var_dump($this->Session->read('Auth.User')); 

我可以看到存储在会话中的所有我的用户数据,但我并不需要所有的人都在这里。当然,我可以只用我需要的数据子集重写会话,我的会话存储在memecache中,而且我不能浪费内存。

我希望能够轻松地更新cakephp,所以我提议不要重写cakephp组件的部分。

我正在寻找一种解决方案,让我在会议中指定女巫领域。 谢谢。

回答

4

您可以编写自己的身份验证组件是这样的:

class MyAuthComponent extends AuthComponent { 

var $storeFields = array(); 

protected function cleanupUserData($user) { 
    if (empty($this->storeFields)) return $user; 

    retrun array_intersect_key($user, array_flip($this->storeFields)); 
} 

    public function login($user = null) { 
     $this->_setDefaults(); 

     if (empty($user)) { 
      $user = $this->identify($this->request, $this->response); 
     } 
     if ($user) { 
      $this->Session->renew(); 
     $user = $this->cleanupUserData($user); 
     $this->Session->write(self::$sessionKey, $user); 
     } 
     return $this->loggedIn(); 
    } 
} 

,然后写在控制器是这样的:

$this->MyAuth->storeFields = array('email', 'name', 'dob');