試してみまし@Assert\MinLength
たが、パスワードをエンコードした後、すべての場合に十分な長さであるかどうかを確認しているようです。エンコードする前に制約を設定するにはどうすればよいですか?
登録フォームをバインドした後、シンボルの数を数えることほど良いことは考えられstrlen
ませんが、これは良い方法ではないと思います。また、これでも機能するかどうかはわかりません。正確にいつエンコードが行われるかはわかりません。
任意の提案をいただければ幸いです!前もって感謝します!
問題は、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も確認してください。
パスワードセッターで自分でパスワードをエンコードしないでください。その代わりに、何らかのエンコーダーを使用し(独自のエンコーダーを作成することもできます)、フォームが検証された後にパスワードをエンコードします。
エンコーダの使用例は次のとおりです。
http://symfony.com/doc/current/book/security.html#encoding-the-user-s-password