【问题标题】:In FosUserBundle, get old and new password of a User to duplicate password reset on a third-party database在 FosUserBundle 中,获取用户的新旧密码以在第三方数据库上重复密码重置
【发布时间】:2017-12-31 01:07:23
【问题描述】:

我正在使用 FosUserBundle 来管理我的网络用户,并且还通过 API 来登录移动应用程序。 我有一个resetPasswordAction API 方法可以在应用内启用密码重置。

但我还为一些允许我管理他们的角色的用户使用第三方数据库,因此这些用户必须使用他们的第三方凭据注册/登录。然后我复制 FosUser 数据库中的数据。

现在,如果他们想重设密码,显然会使用我的 API 方法在我的 FosUser 数据库上完成,而不是在第三方数据库上完成。我想要实现的是获取用户的邮箱、旧密码和新密码,这样我就可以使用第三方API方法在第三方数据库

我尝试创建事件侦听器,但RESETTING_RESET_COMPLETED 收到FilterUserResponseEvent,所以我只能捕获电子邮件和新密码。

我有点卡在这里,所以如果有人知道我如何管理这个,那将是一个很大的帮助!

谢谢。

【问题讨论】:

    标签: symfony fosuserbundle symfony-2.8


    【解决方案1】:

    您可能希望将旧密码保留在您的用户实体(扩展 FOS 用户实体)上作为一个字段。

    /**
     * @var string
     *
     * @ORM\Column(name="old_password", type="string")
     */
    private $oldPassword;
    

    您必须创建一个命令,将所有用户的当前密码迁移到数据库中新的“old_password”列。

    这也很棘手,因为您必须在每次用户更改密码时填充该实体字段,并在创建用户时填充它。这给任何处理用户交互的控制器增加了很多复杂性。

    然后在您的事件监听器中,您必须从 User 实体获取旧密码,发布您的 API 帖子,如果一切顺利,则更新数据库并将“old_password”设置为当前密码。

    【讨论】:

    • 可以,但是在安全性方面它不是那么好!或使用散列的 $oldPassword,但这意味着也具有解码功能。
    • 您能否在将旧密码发送到表单之前捕获它们?将它们发送到控制器中的端点,捕获通行证,然后将它们转发到 FOS 端点? (我假设是 /resetting 并由 FOS 处理。)
    • 我得看看能不能做这样的事情...仍然不确定这些方法的安全问题... :)
    • 安全性并不容易通过 HTTP 发送密码或以明文形式存储在您自己的服务器上。祝你好运。
    猜你喜欢
    • 2023-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-16
    • 2021-12-22
    • 2014-04-09
    • 1970-01-01
    • 2011-10-01
    相关资源
    最近更新 更多