我是CakePHP和框架的新手,我试图谷歌寻找答案而没有任何运气。
我正在使用空白login()函数,并希望能够在登录时更改用户记录(如last_login)。我怎么能这样做?
答案 0 :(得分:1)
如果您正在使用Cake的Auth组件,首先您必须在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'));
}
注意:确保您的users表中有last_login字段,并且设置为datetime。
答案 1 :(得分:0)
假设您在应用中使用了内置的AuthComponent
,则需要在控制器中设置以下属性:
$this->Auth->autoRedirect = false;
这样您就可以使用login()
功能(和logout()
)来执行操作。有关当前登录用户的信息可通过
$this->Auth->user()
然后,您可以使用此数据为该用户执行任何操作。
作为一个无耻的自我推销,我建议你看看my open source project,我正在使用这种技术创建一个“记住我”的cookie。
答案 2 :(得分:0)
我相信你可以在login()函数中添加东西,即使autoRedirect设置为true。我有一些隐式重定向问题(用户请求受限资源,必须登录,然后重定向),所以我在登录功能中添加了一些代码。似乎工作正常,另外还调用了自动登录功能。
我会说,继续添加一些登录逻辑,看看它是否适合你。
答案 3 :(得分: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());
}
}
然后在用户模型中创建:
function afterLogin($User) {
// perform actions on $User here
return true; // return false to halt login
}