cakephp 2.0如何更新auth数据?

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)


Eve*_*ani 8

将更新的数据写入会话,例如:

$this->Session->write('Auth.User', $data);
Run Code Online (Sandbox Code Playgroud)

在CakePHP 2.x之前,如果不破坏框架设计,则无法在模型中执行此操作.

使用CakePHP 2.x,您可以从模型加载会话组件并进行更新.


fun*_*der 5

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)