我有一个页面,我可以修改用户详细信息(用户名,名字,头像......)。 我的导航栏中有一个元素,其中包含有关当前登录用户的信息。问题是我无法弄清楚如何在修改数据后立即刷新会话。
UsersController :中的
public function edit($id = null)
{
if (!$id) {
throw new NotFoundException(__('Invalid user'));
}
$user = $this->Users->get($id);
if ($this->request->is(['post', 'put'])) {
$this->Users->patchEntity($user, $this->request->data);
if ($this->Users->save($user)) {
//REFRESH SESSION ????\\
$this->request->session()->write('Auth.User', $user);
//\\
$this->Flash->success(__('User has been updated.'));
return $this->redirect(['action' => 'edit/' . $id]);
}
$this->Flash->error(__('Unable to update User details.'));
}
$this->set(compact('user'));
}
答案 0 :(得分:8)
只需在登录时设置它,就像使用AuthComponent::setUser()
一样更新它。
此外,您可能希望仅在已编辑的用户实际上是当前登录的用户的情况下才这样做。并且您希望以与Auth组件相同的格式设置数据,即( (现在),作为一个数组,出于安全考虑,没有密码。
一个简单示例,假设名为id
的单个列主键和名为password
的密码列
if ($this->Auth->user('id') === $user->id) {
$data = $user->toArray();
unset($data['password']);
$this->Auth->setUser($data);
}
另见