我在Bundle中创建了一个User自定义类。它继承自FOSUserBundle的BaseUser类。
在我的课堂上,我已经定义了几个属性,这些属性是我的Bundle的实体,比如Adress,Avis等。
我已经使用data_class User定义了所有表单的formType。 它允许我检索有趣的用户信息,如用户名(!)并在我的表单中显示它。 但是当我验证我的表单时,它要求我填写User类的plainPassword字段,因为它是一个强制属性。
首先,我想从数据库中检索密码,然后在显示之前将其填入表单中,但这似乎不可能作为安全措施。 因此我在注册后尝试将其存储在会话中(我知道很难看),但似乎无法强制使用带有值的表单数据(当然因为它是密码类型字段)...
所以问题是:你会做什么?
答案 0 :(得分:0)
我不会在任何地方存储用户普通密码,更不用说在浏览器中显示它了。
使用纯文本密码就像您正在做的那样对您的应用程序以及使用它的任何和所有用户都是一个主要的安全威胁。
FOSUserBundle中的默认用户类有两个密码字段password
和plainPassword
。该简单密码由表单填写,然后,在控制器中,password
字段由您为防火墙配置的任何加密方法生成。然后将新用户添加到数据库中,清除普通密码字段,不再使用。
如果您尝试设置忘记密码解决方案,我建议您使用某种唯一密钥(作为网址参数)向用户发送电子邮件,请他们确认,然后让他们有机会更新密码。
答案 1 :(得分:0)
但检索它的目的是什么? 您想要修改用户的任何数据,如用户名或电子邮件? 请记住,您可以拥有/ profile' module'在FOSUser Bundle中,用于修改例如用户名和电子邮件。 要更改密码,您可以使用单独的模块'更改密码(我不记得路径)。也许那就是你在寻找什么?当然,用户只能编辑自己的数据。这些模块可以通过deafault使用(您必须为它们提供路由)。
如果您想要,例如,该管理员会修改其他用户可能感兴趣的数据: 如果是密码,请查看db中名为' salt'的列,该列用于在db中编码密码。如果你尝试在没有salting的情况下在db中保存密码它就不会工作 - 所以我想如果你想通过一些自定义动作更改db中的密码 - 你必须设置普通密码并且它将被自动编码。 / p>
如果你想填写某些表格的字段,默认情况下请阅读Symfony中的表格,字段类型及其附加功能,并记住密码字段需要单独处理。