AnN*_*LaI 14 cakephp cakephp-2.0
当我更新用户模型中的数据时,不会更新Auth数据.
当我更新用户模型时,如何"刷新"$ this-> Auth-> user()返回的数据?
我不想用
$这 - > Auth->登录($数据);
更新我的用户表后
AnN*_*LaI 25
我尝试了以下这一行.它的工作原理很好我修改用户数据后我写了以下几行
$this->Session->write('Auth', $this->User->read(null, $this->Auth->User('id')));
Run Code Online (Sandbox Code Playgroud)
将更新的数据写入会话,例如:
$this->Session->write('Auth.User', $data);
Run Code Online (Sandbox Code Playgroud)
在CakePHP 2.x之前,如果不破坏框架设计,则无法在模型中执行此操作.
使用CakePHP 2.x,您可以从模型加载会话组件并进行更新.
evert0ns回答是对的.但是你应该使用AuthComponent :: login(),因为数据也保存在AuthComponent中,并且不是每次都从会话中获取.
几天前我遇到了这个问题.
// AppController.php
/**
* Renews current user data, e.g. in case of an email address change while being logged in.
*
* @param array $newUserData
* @return void
*/
protected function renewUserSession($newUserData){
if(!isset($newUserData) || empty($newUserData)){
return;
}
// We need to fetch the current user data so custom indexes are copied
$currentUserData = $this->Auth->user();
if(!isset($currentUserData) || empty($currentUserData)){
return;
}
// Merge old with new data
$newUserData = array_merge($currentUserData, $newUserData);
// Login with new data
$this->Auth->login($newUserData);
}
Run Code Online (Sandbox Code Playgroud)
来源:我的粘贴
把它放在你的AppController中.该方法专门用于合并当前和新用户数据,以保留您可能提供的现有自定义索引.我需要这个,但你可以把它留下来.将更新的用户数据作为参数提供给方法.不在模型查找表单中.例如:
$data = array(
'User' => array(
'username' => 'bla',
'passwort' => 'fu',
'email' => 'hu@bar.com'
)
);
// Wrong
$this->renewUserSession($data);
// Right
$this->renewUserSession($data['User']);
Run Code Online (Sandbox Code Playgroud)