2009-05-05 117 views
0

我是CakePHP和框架的新手,我試圖谷歌尋找一個沒有任何運氣的答案。如何在CakePHP中更新登錄用戶記錄?

我正在使用空白登錄()函數,並希望能夠在登錄時更改用戶記錄(如last_login)。我怎樣才能做到這一點?你使用內置的AuthComponent在你的應用程序

回答

1

如果您使用Cake的驗證組件,第一你必須把下面一行到您的beforeFilter功能:

$this->Auth->autoRedirect = false; 

此設置爲false將允許下面的代碼CakePHP的登錄功能後執行已經做到了它的魔力。

在你登錄功能添加:

if ($this->Auth->User()) { 
$this->User->id = $this->Auth->user('id'); 
$this->User->saveField('last_login', date('Y-m-d H:i:s')); 
} 

注意:確保你有你的用戶表和它的設置爲datetime的LAST_LOGIN領域。

0

假設,你需要設置以下屬性在你的控制器:

$this->Auth->autoRedirect = false; 

這將使您使用login()函數(logout())做東東。關於當前登錄用戶的信息通過

$this->Auth->user() 

然後,您可以使用此數據做任何你想要與該用戶是可用的。

作爲一個無恥的自我推廣,我建議你看看my open source project,我使用這種技術來創建一個「記住我」的cookie。

0

我相信你可以添加東西到login()函數,即使autoRedirect設置爲true。我有隱式重定向(用戶請求受限資源,必須登錄,然後重定向)的一些問題,所以我在我的登錄功能中添加了一些代碼。似乎工作正常,並且automagic登錄功能被調用另外。

我會說,繼續前進,並添加一些邏輯登錄,看看它是否適合你。

0

我喜歡的模式是在User模型中創建一個afterLogin()掛鉤。因此,在您UsersController創建類似:

function beforeFilter() { 
    $this->Auth->autoRedirect = false; 
    parent::beforeFilter(); 
} 

function login() { 
    if($this->Auth->User()) { 
     if(!$this->User->afterLogin($this->Auth->User())) { 
      return $this->logout(); 
     } 

     $this->redirect($this->Auth->redirect()); 
    } 
} 

然後在User模型創建:

function afterLogin($User) { 
    // perform actions on $User here 

    return true; // return false to halt login 
}