0

試してみまし@Assert\MinLengthたが、パスワードをエンコードした後、すべての場合に十分な長さであるかどうかを確認しているようです。エンコードする前に制約を設定するにはどうすればよいですか?

登録フォームをバインドした後、シンボルの数を数えることほど良いことは考えられstrlenませんが、これは良い方法ではないと思います。また、これでも機能するかどうかはわかりません。正確にいつエンコードが行われるかはわかりません。

任意の提案をいただければ幸いです!前もって感謝します!

4

2 に答える 2

1

問題は、1つのフィールドを2つの目的で使用していることです。つまり、パスワードをプレーンテキストとエンコードされた形式で保存することです。必要なのは、それぞれの目的のためのフィールドです。

use Symfony\Component\Validator\Constraints\NotBlank;
use Symfony\Component\Validator\Constraints\MinLength;
use Doctrine\ORM\Mapping\Column;

class User 
{
    /**
     * @NotBlank
     * @MinLength(6)
     *
     * @var string
     */
    private $plainPassword;

    /**
     * @Column
     *
     * @var string
     */
    private $password;
}

フィールドのみが$passwordデータベースに保持され、ユーザーが編集できないようにフォームに表示されません。

$plainPasswordまた、空でないかどうかをチェックし、空でない場合はその値をエンコードしてに入れるDoctrineイベントリスナー(またはその他のコード)が必要です$password

このサービスを使用security.encoder_factoryして、セキュリティ構成でセットアップしたエンコーダーを取得し、それを使用してパスワードをエンコードします。また、ElnurBlowfishPasswordEncoderBundleも確認してください。

于 2012-09-13T08:51:37.357 に答える
0

パスワードセッターで自分でパスワードをエンコードしないでください。その代わりに、何らかのエンコーダーを使用し(独自のエンコーダーを作成することもできます)、フォームが検証された後にパスワードをエンコードします。

エンコーダの使用例は次のとおりです。

http://symfony.com/doc/current/book/security.html#encoding-the-user-s-password

于 2012-09-13T08:51:00.277 に答える