我是CakePHP和框架的新手,我试图谷歌寻找答案而没有任何运气。

我正在使用空白login()函数,并希望能够在登录时更改用户记录(如last_login)。我怎么能这样做?

有帮助吗?

解决方案

如果您正在使用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。

其他提示

假设您在app中使用了内置的 AuthComponent ,则需要在控制器中设置以下属性:

$this->Auth->autoRedirect = false;

这将使您能够使用 login()函数(和 logout())来完成工作。有关当前登录用户的信息可通过

获得
$this->Auth->user()

然后,您可以使用此数据为该用户执行任何操作。

作为一个无耻的自我推销,我建议你看看我的开源项目,我正在使用这种技术创建一个“记住我”。 cookie中。

我相信你可以在login()函数中添加东西,即使autoRedirect设置为true。我有一些隐式重定向问题(用户请求受限资源,必须登录,然后重定向),所以我在登录功能中添加了一些代码。似乎工作正常,另外还调用了自动登录功能。

我会说,继续添加一些登录逻辑,看看它是否适合你。

我喜欢的模式是在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
}
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top