Php 从表单中输入密码
我是PHP symfony的新手,我正在使用FOSUserbundle,我为用户更改密码创建了一个新视图,但是很难从FOSUserbundle嵌入更改密码表单,所以我手动创建了一个html表单,并在视图的控制器中添加了一些代码,一切都很好,更改pasword在我的DB上工作,但问题是密码是纯文本的,我需要它进行编码(加密),如何对密码进行编码以将其发送到DB 以下是my twig view中的表单:Php 从表单中输入密码,php,symfony,fosuserbundle,encode,Php,Symfony,Fosuserbundle,Encode,我是PHP symfony的新手,我正在使用FOSUserbundle,我为用户更改密码创建了一个新视图,但是很难从FOSUserbundle嵌入更改密码表单,所以我手动创建了一个html表单,并在视图的控制器中添加了一些代码,一切都很好,更改pasword在我的DB上工作,但问题是密码是纯文本的,我需要它进行编码(加密),如何对密码进行编码以将其发送到DB 以下是my twig view中的表单: <form action="{{path ('fos_user_profile_chang
<form action="{{path ('fos_user_profile_change_password')}}" method="POST" id="form_user_change_password">
<div class="form-group">
<div>
<label for="fos_user_change_password_form_current_password" class="required">Contraseña actual</label>
<input type="password" id="fos_user_change_password_form_current_password" name="fos_user_change_password_form[current_password]" required="required">
</div>
<div>
<label for="new_password" class="required">Nueva contraseña</label>
<input type="password" id="new_password" name="new_password" required="required">
</div>
<div>
<label for="new_password_repeat" class="required">Repita la contraseña</label>
<input type="password" name="new_password_repeat" id="new_password_repeat" required="required">
</div>
<div>
<input type="submit" value="{{ 'change_password.submit'|trans }}" class="btn btn-primary btn-block uppercase" />
</div>
</div>
</form>
请告诉我,我是PHP和Symfony3的新手:)从上面的评论和代码来看,您似乎只想覆盖FOSUserBundle的change\u password\u content.html.twig模板。这将允许您在自己的模板中使用FOSUserBundle的现有ChangePassword表单类型和ChangePasswordController 此处提供了执行此操作的参考: 要帮助您了解一些实施细节,请执行以下操作:
在正确执行上述覆盖时,您不需要覆盖ChangePasswordController,因此您可以通过FOSUserBundle中的UserManager获得所需的密码哈希。您不需要对其进行加密。你需要把它搞乱。请使用PHP(
password\u hash()
和password\u verify()
)来处理密码安全性。如果您使用的PHP版本低于5.5,则可以使用密码\u hash()
。在散列之前,不需要对它们执行任何操作或使用任何其他清理机制。这样做会更改密码并导致不必要的额外更改coding@GrumpyCrouton-你注意到他在用Symfony了吗?Symfony有密码编码器,它封装了各种散列例程。直接使用密码\u散列将带来各种乐趣。@Cerad对不起,我对Symfony一点也不熟悉。无论哪种方式,“加密”都不是正确的操作。问题是您没有正确覆盖更改密码模板和/或控制器。看看这些:另外,你能告诉我你在security.yml文件中配置了什么编码器吗?你的security.yml是否包含类似这样的内容:`encoders:FOS\UserBundle\Model\UserInterface:bcrypt`@CapitanDuke我很乐意,干得好。FOSUserBundle是最流行和最常用的捆绑包之一。控制器的重写方式类似,您也可以创建自己的FormType,可以在项目的config.yml中进行设置。请阅读以下内容:。你可能下一步就要开始了。
/**
* Change user password.
*
* @param Request $request
*
* @return Response
*/
public function changePasswordAction(Request $request)
{
$userManager = $this->get('fos_user.user_manager');
$user = $this->getUser();
$new_password = $_POST['new_password'];
$user->setPassword($new_password);
$userManager->updateUser($user);
$url = $this->generateUrl('fos_user_profile_edit');
$response = new RedirectResponse($url);
return $response;
}