扩展FOSUserBundle密码验证以要求特殊字符

时间:2014-11-08 00:02:35

标签: symfony fosuserbundle

我正在使用FOSUserBundle。 我已经使用其他类变量实现了自己的用户实体。注册,登录和丢失的密码正在按预期工作。 : - )

我需要为密码验证添加其他要求。 我在the Symfony docs找到了一篇Symfony文章。 本文介绍如何创建验证方法并使用Callback约束在validation.xml文件中引用它。 我已经实现了回调并更改了validation.xml,所有内容都适用于注册。

我还没想到的是如何通过丢失的密码链接或更改密码页面来更改密码。

非常欢迎建议和文档指示。

提前致谢。

1 个答案:

答案 0 :(得分:5)

好。事实证明我需要做的是为我的用户包创建一个validate.xml文件,并使用与FOSUserBundle使用的组名不同的组名。 还需要更新config.yml以指定我的组。 具体来说,我这样修改了config.yml:

fos_user:
    ...
    change_password:
        form:
            validation_groups: [myChangePassword]

在src / myProject / UserBundle / Resources / config / validation.xml中:

<constraint-mapping xmlns="http://symfony.com/schema/dic/constraint-mapping"
                    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                    xsi:schemaLocation="http://symfony.com/schema/dic/constraint-mapping
        http://symfony.com/schema/dic/constraint-mapping/constraint-mapping-1.0.xsd">
  <!--
   ! Password constraints:
   !-->
  <class name="FOS\UserBundle\Form\Model\ChangePassword">
    <property name="new">
      <constraint name="Regex">
        <option name="pattern">/[0-9!@#$%^*_-]+/</option>
        <option name="message">Must include at least one digit or !,@,#,$,%,^,*</option>
        <option name="groups">
          <value>myChangePassword</value>
        </option>
      </constraint>
      <constraint name="Length">
        <option name="min">8</option>
        <option name="max">254</option>
        <option name="minMessage">Must be at least eight characters</option>
        <option name="maxMessage">Too long</option>
        <option name="groups">
          <value>myChangePassword</value>
        </option>
      </constraint>
    </property>
  </class>
</constraint-mapping>

希望这会节省一些时间。