【发布时间】:2017-10-10 16:16:49
【问题描述】:
我是 PHP symfony 的新手,我正在使用 FOSUserbundle,我为用户更改密码创建了一个新视图,但是从 FOSUserBundle 嵌入更改密码表单非常困难,因此我手动创建了一个 html 表单和在视图的控制器中添加一些代码,一切正常,更改密码适用于我的数据库,但问题是密码是明文,我需要它编码(加密),我如何编码我的密码以将其发送到分贝?
这是我的树枝视图中的表单:
<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>
这是我的控制器:
/**
* 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;
}
我是 PHP 和 Symfony3 的新手 :)
【问题讨论】:
-
你不需要加密它。您需要对其进行哈希处理。请使用 PHP 的 built-in functions(
password_hash()和password_verify())来处理密码安全问题。如果您使用低于 5.5 的 PHP 版本,您可以使用password_hash()compatibility pack。 没有必要 escape passwords 或在散列之前对其使用任何其他清理机制。这样做会更改密码并导致不必要的额外编码 -
@GrumpyCrouton - 你注意到他在使用 Symfony 了吗? Symfony 有包含各种散列程序的密码编码器。直接使用password_hash会带来各种乐趣。
-
@Cerad 对不起,我对 Symfony 一点也不熟悉。无论哪种方式,“加密”都不是正确的行为。
-
您的问题是您没有正确覆盖更改密码模板和/或控制器。看看这些:symfony.com/doc/current/bundles/FOSUserBundle/…symfony.com/doc/current/bundles/FOSUserBundle/… 另外,你能告诉我你在 security.yml 文件中配置了什么编码器吗?
-
您的 security.yml 是否包含类似:` 编码器:FOS\UserBundle\Model\UserInterface: bcrypt `
标签: php symfony fosuserbundle encode