0

最近のsymfony2で最も単純な認証に問題があります.

私の security.yml :

セキュリティ: エンコーダ: Symfony\Component\Security\Core\User\User: 平文

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

providers:
    in_memory:
        memory:
            users:
                user:  { password: userpass, roles: [ 'ROLE_USER' ] }
                admin: { password: adminpass, roles: [ 'ROLE_ADMIN' ] }

firewalls:
    dev:
        pattern:  ^/(_(profiler|wdt)|css|images|js)/
        security: false

    login:
        # pattern:  ^/demo/secured/login$
        pattern:  /login
        security: false

    secured_area:
        pattern:    ^/admin
        form_login:
            check_path: check
            login_path: login
        logout:
            path:   /logout
            target: /index
        #anonymous: ~
        #http_basic:
        #    realm: "Secured Demo Area"

access_control:
    - { path: ^/admin/, roles: ROLE_ADMIN }

および DefaultControler.php の一部

    public function loginAction() {

    $request = $this->getRequest();
    $session = $request->getSession();

    if ($request->attributes->has(SecurityContext::AUTHENTICATION_ERROR)) {
        $error = $request->attributes->get(SecurityContext::AUTHENTICATION_ERROR);
    } else {
        $error = $session->get(SecurityContext::AUTHENTICATION_ERROR);
    }

    return $this->render('JimmyTestBundle:Default:login.html.twig', array(
        // last username entered by the user
        'last_username' => $session->get(SecurityContext::LAST_USERNAME),
        'error'         => $error,
    ));
}

public function checkAction() 
{

}

私は symfony の Web サイトからクック ブックを読んでいます。checkAction はファイアウォール レイヤーによって解釈されるはずですが、ログインしようとすると、おそらくこのようなものではありません。

コントローラーは応答を返さなければなりません (null が与えられます)。コントローラーのどこかに return ステートメントを追加するのを忘れていませんか? 500 内部サーバー エラー - LogicException

私の login.html.twig もほぼチュートリアルからコピペです。何かアドバイス?

4

2 に答える 2

0

「secured_area」ファイアウォールには、check_path に送信された要求を実際にキャッチするためのセキュリティ プロバイダーがありません。プロバイダーは次のように構成されますsecurity.providers

providers:
    your_provider_name: name_of_provider_service

現在... symfony が提供する特別なプロバイダーである "in_memory" という名前のプロバイダーが 1 つしかありません。

check_path ルートに投稿された資格情報の認証に使用するために、「secured_area」ファイアウォールに追加します。

firewalls:
    secured_area:
        pattern:   ^/admin
        provider:   in_memory   

...不要な「ログイン」ファイアウォールを構成から削除します

login:
    # pattern:  ^/demo/secured/login$
    pattern:  /login
    security: false 
于 2013-07-01T15:07:42.910 に答える
0

routing.yml でコントローラに言及することを忘れないでください。あなたの場合、次のようなものです。

_demo_secured:
    resource: "@JimmyTestBundle/DefaultController.php"
    type:     annotation
于 2014-11-07T15:43:36.560 に答える