处理 FOSUserBundle PlainPassword 字段

Dealing with FOSUserBundle PlainPassword field

我在我的 Bundle 中创建了一个用户自定义 class。它继承自 FOSUserBundle 的 BaseUser class。

在我的 class 中,我定义了几个属性,它们是我的 Bundle 的实体,例如 Adress、Avis 等。

我已经用 data_class 用户定义了我所有表单的表单类型。 它允许我检索有趣的用户信息,如用户名 (!) 并将其显示在我的表单中。 但是当我验证我的表单时,它要求我填写用户 class 的 plainPassword 字段,因为它是一个强制属性。

首先我想从数据库中检索密码以在显示之前将其填写到表单中,但作为一种安全措施似乎不可能。 因此,我尝试在注册后将其存储在会话中(我知道这很丑陋),但似乎无法用值强制表单数据(肯定是因为它是密码类型字段)...

所以问题是:你会怎么做?

我不会将用户明文密码存储在任何地方,更不用说在浏览器中显示了。

像您这样使用纯文本密码是对您的应用程序以及所有使用它的用户的主要安全威胁。

FOSUserBundle 中的默认用户 class 有两个密码字段,passwordplainPassword。该明文密码由表单填写,然后在控制器中,password 字段由您为防火墙配置的任何加密方法生成。然后将新用户添加到数据库中,普通密码字段将被清除,不再使用。

如果您尝试设置忘记密码的解决方案,我建议通过电子邮件向用户发送某种唯一密钥(作为 URL 参数),请他们确认,然后让他们有机会更新他们的密码。

但是检索它的目的是什么? 您想修改用户的任何数据,例如用户名或电子邮件吗? 请记住,您可以在 FOSUser Bundle 中拥有 /profile 'module',它用于修改用户名和电子邮件等。 要更改密码,您有单独的 'module' 更改密码(我不记得路径)。也许这就是你要找的?当然,那样用户只能编辑自己的数据。这些模块默认可以使用(你必须为它们提供路由)。

例如,如果您希望管理员修改您可能感兴趣的其他用户的数据: 如果是密码,请查看数据库中名为 'salt' 的列,该列用于在数据库中对密码进行编码。如果您尝试在不加盐的情况下将密码保存在数据库中,它将无法正常工作 - 所以我认为如果您想通过某些自定义操作更改数据库中的密码 - 您必须设置纯密码,它会自动编码。

如果您想默认填写某些表单的字段,请阅读有关 Symfony 中的表单、字段类型及其附加功能的内容,并记住密码字段需要单独的方法。