【问题标题】:How do I validate the password of a user created with the User Manager?如何验证使用用户管理器创建的用户的密码?
【发布时间】:2017-12-06 19:45:03
【问题描述】:

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

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

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

甚至像这样直接在密码上调用函数:

$arrayOfErrors = functionThatValidatesUserPassword('1');

我应该用什么来代替这里的functionThatValidatesUserPassword

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

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

我只是得到一个空的错误列表。我原以为会看到“密码太短”的错误消息,如果您在 /register 页面上注册一个具有相同密码的帐户,就会出现这种情况。

我正在使用 Symfony 3.4 和 FosUserBundle 2.0。


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

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

【问题讨论】:

  • @bangbambang 是的,这是正确的,使用我在自定义 validation.xml 文件中创建的规则
  • 抱歉,困了,不小心删除了我最后的评论。假设createUser() 返回一个实体,验证器服务应该工作。你用的是什么版本的 SF?
  • @bangbambang Symfony 3.4,FosUserBundle 2.0
  • 我从未广泛使用 FOSUserBundle,所以我可能错了。但是您是否尝试通过调用$userManager->updatePassword($user) 来触发验证?
  • @bangbambang 抱歉,我不得不离开一段时间。你建议我在$validator->validate($user) 之前这样做吗?

标签: php symfony validation fosuserbundle symfony-3.4


【解决方案1】:

我找到了问题的答案。 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);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-05-19
    • 2018-08-23
    • 2023-04-03
    • 2018-06-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多