配置文件更改时出现FOS UserBundle错误

时间:2013-02-20 10:10:44

标签: symfony fosuserbundle

我正在使用带有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标记的点。

1 个答案:

答案 0 :(得分:1)

我自己解决了这个问题。解决方案是告诉用户管理员通过以下方式重新加载用户:

$this->container->get('fos_user.user_manager')->reloadUser($user);