FOSUserBundle 强制用户写入不同的密码

2024-05-25

我有一个使用 FOSUSerBundle 在 Symfony2.0 上运行的应用程序。 连接该应用程序的用户每 3 个月必须更改一次密码,密码已就位且正在运行。

今天,如果用户每 3 个月写入与前一个密码相同的新密码,则无需验证,他还可以使用该密码 3 个月。

我想对密码重置添加限制,并强制用户提供与之前不同的密码。 我不知道该怎么做。我尝试创建一个验证器,但验证器中没有我的用户 ID...

有什么线索吗?


我找到了一个解决方案,它有效,但我仍然有一个小问题:当我提交新密码时,如果我尝试输入与前一个密码相同的密码,我的表单无效(这很好!),但错误消息当我使用时,我的树枝没有显示:

{{ form_widget(edit_form) }}

知道为什么吗?

无论如何,这是我的解决方案:

我在类级别添加了一个验证器来验证密码。为此,我在我的 User 类上添加了一个验证器:

// \src\Acme\UserBundle\Resources\config\validation.xml
<class name="Acme\UserBundle\Entity\User">
    <constraint name="Acme\UserBundle\Validator\Constraints\IsDifferentPassword">
        <option name="message">Password has to be different from the previous one</option>
    </constraint>
    <property name="plainPassword">
        <constraint name="NotBlank">
            <option name="message">fos_user.password.blank</option>
        </constraint>
    </property>
</class>

我在类级别创建了一个验证器:

// \src\Acme\UserBundle\Validator\Constraints\IsDifferentPassword.php

namespace Acme\UserBundle\Validator\Constraints;

use Symfony\Component\Validator\Constraint;

/**
 * @Annotation
 */
class IsDifferentPassword extends Constraint
{
    public $message = 'Password has to be different from the previous one';

    public function getTargets()
    {
        return Constraint::CLASS_CONSTRAINT;
    }
}

And :

// \src\Acme\UserBundle\Validator\Constraints\IsDifferentPasswordValidator.php

namespace Acme\UserBundle\Validator\Constraints;
use Symfony\Component\Validator\Constraint;
use Symfony\Component\Validator\ConstraintValidator;
use Symfony\Component\Security\Core\Encoder\MessageDigestPasswordEncoder;

class IsDifferentPasswordValidator extends ConstraintValidator
{
    public function isValid($value, Constraint $constraint)
    {
        $encoder = new MessageDigestPasswordEncoder();
        $password = $encoder->encodePassword($value->getPlainPassword(), $value->getSalt());
        $oldPassword = $value->getPassword();
        if($password == $oldPassword){
            return false;
        }
        return true;
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

FOSUserBundle 强制用户写入不同的密码 的相关文章

随机推荐

  • 在 Angular 2、4、5、6 中实现插件架构/插件系统/可插拔框架

    2018 年 5 月 24 日更新 从我原来的帖子来看 我们现在已经是 Angular 的 3 版本了 但仍然没有最终的可行解决方案 Lars Meijdam LarsMeijdam 提出了一种有趣的方法 当然值得一看 由于专有问题 他不得
  • termios 库中如何表示标志?

    我是 C 语言和驱动程序编程的新手 目前 我正在编写一个用户空间驱动程序 以便使用 Debian 通过 USB 与 RS232 进行通信 在研究时 我遇到了以下代码 tty c cflag PARENB No Parity tty c cf
  • JSON:@Transient 字段未序列化

    我有一个域类 Loan java 其中有一个未持久化的字段 JsonInclude Transient private LoanRating loanRating Public Getters and setters for that fi
  • 如何在 render 方法中的 React const 变量内循环

    我有一个映射的 const 变量 我用它来注入渲染方法中的返回值 我现在的问题是 我正在映射的对象本身有一个对象集合 我想循环遍历每一个并添加 jsx 语法 这就是我所拥有的 const tasks this state tasks map
  • 将 jupyter R 内核与 Visual Studio 代码结合使用

    对于 python jupyter 笔记本 我目前正在使用 VSCode python 扩展 但是我找不到任何使用替代内核的方法 我对 jupyter R 内核特别感兴趣 有没有办法在 VSCode 中使用 R 内核来处理 jupyter
  • onYouTubeIframeAPIReady() 未触发

    我已经浏览了很多问题和 youtube api 的东西 但我一生都无法弄清楚为什么 onYouTubeIframeAPIReady 不起作用 这是我的 iframe 还有我的脚本 function callYTapi var tag doc
  • 如何在 yeoman/grunt 项目中自动包含脚本?

    我有一个正在工作的自耕农项目 我正在使用 grunt usemin 为了包含 javascript 我在以下位置执行此操作index html
  • MVC 将 PartialViewResult 渲染为字符串

    免责声明 我编辑了问题 因为我改变了过程 但它并没有改变任何问题 我正在尝试获得一个PartialViewResult呈现为字符串 我尝试使用RenderRazorViewToString这个问题的方法将视图渲染为字符串 https sta
  • 如何检查 SQL Server 数据库的 Azure 定价层更改历史记录?

    两个月前 我创建了一个具有 S0 定价层的 AZURE SQL 数据库 但不知何故 同一数据库的定价等级突然升级到 P15 持续 10 天 然后再次降级到 S0 我想查一下这是何时以及如何发生的 有什么方法可以从 Azure 门户或使用任何
  • 将列名与第一行的数据连接起来,Python 3.6 Dataframe

    我想将数据框第一行的数据添加到其列名称并删除第一行 源数据框 2013K2 2013K3 2013K4 2013K5 ABC1 ABC2 ABC3 ABC4 324 5435 543 543 6543 543 657 765 765 876
  • 重定向和导航/转发之间有什么区别以及何时使用什么?

    JSF 中的导航有什么区别 FacesContext context FacesContext getCurrentInstance context getApplication getNavigationHandler handleNav
  • 如何在 actix_web 中间件中打印响应正文?

    我想使用编写一个非常简单的中间件actix web https docs rs actix web 3 1 0 actix web index html框架 但到目前为止它在各个方面都击败了我 我有一个这样的骨架 let result ac
  • 用于显示列表错误的表单绑定

    我有一个Product对象包含一个Set
  • 如何将屏幕旋转为横向?

    如何将屏幕旋转为横向 你能建议简单的代码吗 这比你最初想象的要棘手 经过多次讨论后 这篇博文 带有随后进一步讨论的链接 包含了最简洁的答案 如何随意切换横屏模式 http simonwoodside com weblog 2009 2 27
  • 通过 jquery 设置 type="file" 的值[重复]

    这个问题在这里已经有答案了 Note 下面的答案反映了 2009 年旧版浏览器的状态 现在 您实际上可以在 2017 年使用 JavaScript 动态 编程地设置文件输入元素的值 有关详细信息以及演示 请参阅此问题中的答案 如何以编程方式
  • 将内存清零

    海湾合作委员会 4 4 4 C89 我只是想知道大多数 C 程序员想要将内存清零时会做什么 例如 我有一个 1024 字节的缓冲区 有时我这样做 char buffer 1024 0 这会将所有字节归零 但是 我应该这样声明并使用 mems
  • CSS - 设计类样式的不同方法

    阅读下面的 CSS 代码我想知道 a 和 b 之间有什么区别 第一个声明是一种好的样式方式吗 a round box icon b round box icon 使用 A 您选择具有 2 个类的所有元素 同时 使用 B 您选择所有具有类 r
  • Chart.js 圆环图无法正常工作

    我正在尝试使用 Chart js 圆环图 我的 JSON 数据是从数据库中正确获取的 但在值填充时图表将不会显示 如果我粘贴静态示例代码 那么它会显示正确的数据 function playerPrel2Res qID var tmp pla
  • 如何在使用 window.open 时保持当前页面

    我正在射击Window open 命令 这会在另一个选项卡中打开链接页面 我想要的是 当我单击链接时 链接将在新窗口中打开 但应该位于同一页面上 那可能吗 目前我正在这样使用 function AddToDatabase url windo
  • FOSUserBundle 强制用户写入不同的密码

    我有一个使用 FOSUSerBundle 在 Symfony2 0 上运行的应用程序 连接该应用程序的用户每 3 个月必须更改一次密码 密码已就位且正在运行 今天 如果用户每 3 个月写入与前一个密码相同的新密码 则无需验证 他还可以使用该