5

パスワードをエンコードするために使用します。

 $entity->setSalt(md5(time()));
 $encoder = new MessageDigestPasswordEncoder('sha1');
 $password = $encoder->encodePassword($editForm->get('password')->getData(), $entity->getSalt());
 $entity->setPassword($password);

しかし、どのようにリザールは反対に踏み出すことができますか?つまり、暗号化されていないパスワードを取得するにはどうすればよいですか?これを使うと

$entity->getPassword()

私にこれを示しています:

xOGjEeMdi4nwanOustbbJlDkug8=

お返事ありがとうございます。ユーザーが古いパスワードを入力し、それが正しいことを確認するフォームを作成しようとしています。私がこれを持っている形で:

            ->add('antigua', 'password', array('property_path' => false))
        ->add('password', 'repeated', array('first_name' => 'Nueva contraseña','second_name' => 'Repite contraseña','type' => 'password'));

そして、私がクラッド内のユーザーを編集するために行くとき、私はこれを持っています:更新アクションで:

public function updateAction($id)
    {
        $em = $this->getDoctrine()->getEntityManager();

        $entity = $em->getRepository('miomioBundle:Empleado')->find($id);

        if (!$entity) {
            throw $this->createNotFoundException('Unable to find Empleado entity.');
        }

        $editForm   = $this->createForm(new EmpleadoType(), $entity);
        $deleteForm = $this->createDeleteForm($id);

        $request = $this->getRequest();
        **$entity->getPassword() is blank why?**
        $editForm->bindRequest($request);

        if ($editForm->isValid()){
            $em->persist($entity);
            $em->flush();
        }
            return $this->redirect($this->generateUrl('empleado_edit', array('id' => $id)));

        return array(
            'entity'      => $entity,
            'edit_form'   => $editForm->createView(),
            'delete_form' => $deleteForm->createView(),
        );
    }

問題は、エンコードされたパスワードが空白になることができないことです。(dbで正しい)ありがとう

4

2 に答える 2

4

古いパスワードと同じ方法で、ユーザーが入力したパスワードを暗号化する必要があります。結果の暗号化されたパスワードは同じである必要があります。

$encoder = new MessageDigestPasswordEncoder('sha1');
$password = $encoder->encodePassword($editForm->get('antigua')->getData(), $entity->getSalt());

これで、暗号化された古いパスワードと新しいユーザーが入力したパスワードを比較できます...

于 2013-07-11T16:45:07.527 に答える
2

sha1 または md5 でエンコードされたパスワードを復号化する可能性はありません。これらの暗号化メソッドは、復号化できないように作成されました。

カスタム エンコーダー:

唯一の方法は、自家製の方法を使用してパスワードを暗号化 (および復号化) する独自のカスタム エンコーダーを作成することです。 -encoder-for-symfony/

encodePassword() 内で $salt を使用する必要はありません。たとえば、各文字を特定の数字に置き換えて、逆の方法でパスワードを取得できるようにすることもできます。また、salt を切り取り、パスワード内に一部を追加することもできます。など...

平文、非推奨:

またはあまりお勧めしませんが、パスワードを暗号化せずに平文にします。

# app/config/security.yml
security:
    encoders:
        Symfony\Component\Security\Core\User\User: plaintext
于 2012-10-27T15:42:36.410 に答える