3

管理者ユーザーを追加するための私のコードは次のとおりです。

public function addAction(Request $request){
    $admin=new Admin();
    $form=$this->createForm(new AdminType(), $admin);
    if($request->getMethod()=='POST'){
        $form->bindRequest($request);
        if($form->isValid()){
            $factory = $this->get('security.encoder_factory');
            $encoder = $factory->getEncoder($admin);
            $password = $encoder->encodePassword($admin->getPassword(), $admin->getSalt());
            $admin->setPassword($password);

            $em=$this->getDoctrine()->getEntityManager();
            $em->persist($admin);
            $em->flush();
        }
    }
    return $this->render('PuzzleAdminBundle:Admin:add.html.twig', array(
        'form'=>$form->createView()
    ));
}

ここに私のsecurity.ymlがあります:

security:
encoders:
    Puzzle\AdminBundle\Entity\Admin: sha512
    Symfony\Component\Security\Core\User\User: plaintext

role_hierarchy:
    ROLE_ADMIN:       ROLE_USER
    ROLE_SUPER_ADMIN: [ROLE_USER, ROLE_ADMIN, ROLE_ALLOWED_TO_SWITCH]

providers:
    chain_providers:
        chain:
            providers: [admin_db, in_memory]
    admin_db:
        entity: { class: Puzzle\AdminBundle\Entity\Admin, property: username }
    in_memory:
        memory:
            users:
                root: { password: 123456, roles: [ 'ROLE_SUPER_ADMIN' ] }

root でログインしたいとき、またはエンティティ エンコーダーをプレーンテキストに設定したときは、すべて問題ありません。エンティティ エンコーダーを sha512 に設定すると、常に不正な資格情報が取得されるのはなぜですか?

4

3 に答える 3

8

データベースのフィールド長を確認してください。「The Book」をフォローしていた場合は、フィールドが に設定されている可能性がありますvarchar(50)。Base64 でエンコードされた SHA-512 は、88 文字の文字列を出力します。これに合わせて調整すれば、準備完了です。

于 2012-10-01T11:17:22.857 に答える
1

定義された「パスワード」値は、エンコード後の値である必要があると思います。したがって、sha512エンコーダーを使用するように設定したときに検索される値は、プレーンテキストのパスワードではなく、「123456」のsha512ハッシュになります。

ここを見てください: http ://symfony.com/doc/current/book/security.html#encoding-the-user-s-password 。このセクションの最初の例の後の段落は、これを具体的に扱っています。

于 2012-09-25T18:40:18.927 に答える
1

私は問題を指摘しましたが、私の場合、それはかなりばかげたことでした。データベースのフィールドの長さが小さすぎます

于 2013-04-08T02:32:46.973 に答える