首页 文章

如何验证使用用户管理器创建的用户的密码?

提问于
浏览
1

我想知道如何根据 validation.xml 中定义的验证规则检查任意密码 . 我创建了一个管理页面,管理员用户可以创建其他管理员用户 . 我想使用匿名用户在 /register 页面注册自己的帐户时使用的相同规则来验证这些用户 . 从我所看到的,这些规则在 validation.xml 中定义 .

所以基本上我想做这样的事情:

$userManager = $container->get('fos_user.user_manager');
$user = $userManager->createUser();
$user->setPlainPassword('1');
$arrayOfErrors = functionThatValidatesUserPassword($user);

甚至直接在密码上调用函数,如下所示:

$arrayOfErrors = functionThatValidatesUserPassword('1');

What should I use to replace functionThatValidatesUserPassword here?

我认为验证器服务可能会起作用,但是当我尝试时

$validator = $this->get('validator');
$errors = $validator->validate($user);
print_r($errors);exit;

我只是得到一个空的错误列表 . 我希望看到一个错误说"The password is too short",如果您在 /register 页面上注册具有相同密码的帐户,这就是您所得到的 .

我在Symfony 3.4和FosUserBundle 2.0上 .


在搜索我的问题的答案时,我发现以下两篇文章描述了如何覆盖 validation.xml 文件中定义的规则 .

我计划覆盖验证规则,但是现在我只想使用FosUserBundle附带的内置规则来验证我的密码 .

1 回答

  • 0

    我找到了问题的答案 . FOSUserBundle的内置validation.xml中的约束属于validation groups . 默认情况下, validate 函数仅验证不属于任何组的约束 . validate 函数有第三个参数,它接受包含要检查的约束的组数组 . 所以你要做的就是传入包含你想要检查的约束的组 . 例如,密码字段属于以下组:Registration,Profile,ResetPassword,ChangePassword . 我使用了注册组,所以我的代码如下所示:

    $userManager = $this->get('fos_user.user_manager');
    $user = $userManager->createUser();
    $user->setPlainPassword('1');
    $validator = $this->get('validator', null, array("Registration"));
    $errors = $validator->validate($user);
    

相关问题