Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/256.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 从表单中输入密码_Php_Symfony_Fosuserbundle_Encode - Fatal编程技术网

Php 从表单中输入密码

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

我是PHP symfony的新手,我正在使用FOSUserbundle,我为用户更改密码创建了一个新视图,但是很难从FOSUserbundle嵌入更改密码表单,所以我手动创建了一个html表单,并在视图的控制器中添加了一些代码,一切都很好,更改pasword在我的DB上工作,但问题是密码是纯文本的,我需要它进行编码(加密),如何对密码进行编码以将其发送到DB

以下是my twig view中的表单:

<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

此处提供了执行此操作的参考:

要帮助您了解一些实施细节,请执行以下操作:

  • 转到vendor/friendsofsymfony/user bundle/Resources/views/ChangePassword/change_password.html.twig并复制此文件的内容
  • 然后转到app/Resources/views,创建一个名为ChangedPassword的文件夹,在该文件夹中创建一个新文件并粘贴上面(1)中复制的内容。将文件另存为change_password.html.twig-您在步骤(1)和(2)中所做的是在app/Resources/views中使用自己的模板覆盖FOSUserBundle中的模板。覆盖模板的内容与当前的FOSUserBundle完全相同
  • 现在,继续并对该覆盖模板进行所需的任何更改:例如,更改扩展布局以使用您自己的布局,并在fos_user_内容块周围添加您可能需要的任何附加标记。保存
  • 现在,您已经正确地覆盖了FOSUserBundle模板。如果您需要进一步控制包含表单的内容模板,请继续对名为change_password_content.html.twig的模板重复上述操作,并将change_password.html.twig模板中的include更改为“:ChangePassword/change_password_content.html.twig”

    以上内容现在意味着FOSUserBundle将使用您的覆盖模板,而不是包中现有的模板,从而使您能够完全控制标记、布局、样式等


    在正确执行上述覆盖时,您不需要覆盖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;
    }