我正在使用带有fos用户包的symfony 2.0,当涉及到配置文件更改时,我会得到一个非常奇怪的行为:
在我的用户实体中使用FOSValidator,如下所示:
@FOSValidator\Unique(property="usernameCanonical", message="fos_user.username.already_used", groups={"Facebook", "profile_username"})
在我的ProfileController中
表单通过
验证$form = $this->container->get('form.factory')->create(new ProfileSimpleFormType(array($field)), $user);
$session = $this->container->get("session");
if ($this->container->get('request')->getMethod() == 'POST') {
$form->bindRequest($this->container->get('request'));
if ($form->isValid()) {
$this->container->get('fos_user.user_manager')->updateUser($user);
return $this->container->get('templating')->renderResponse('FOSUserBundle:Profile:show_field.html.' . $this->container->getParameter('fos_user.template.engine'), array(
'field' => $field,
'user' => $user
));
// }
}else{
$user2 = $this->container->get('security.context')->getToken()->getUser();
}
}
但现在到了奇怪的行为:
如果表单无效,因为用户名存在,则$ user2会使用现有用户名设置用户,这样我只需更改用户名就可以劫持其他帐户。
我尝试调试一种视图类型的侦听器,但我找不到将现有用户名设置为secury标记的点。
答案 0 :(得分:1)
$this->container->get('fos_user.user_manager')->reloadUser($user);