0

我将 symfony 2.0 与 fos 用户捆绑包一起使用,当涉及到配置文件更改时,我得到了一个非常奇怪的行为:

在我的用户实体中,我使用 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 使用现有用户名设置用户,因此我可以通过更改用户名来劫持其他帐户。

我试图调试一种视图类型的侦听器,但我找不到将现有用户名设置为安全令牌的点。

4

1 回答 1

1

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

$this->container->get('fos_user.user_manager')->reloadUser($user);
于 2013-02-26T08:39:54.640 回答