3

バックグラウンド

Symfony のドキュメントによると、ログイン フォームは security.yml ファイルで指定する必要があり、login_check パスも指定する必要があります。今まで私のアプリは正常に動作していましたが、ユーザーが安全なページ (mysite.com/edit/123) にアクセスしようとすると、ログに記録されていない場合、/login にリダイレクトされ、ログイン後に元の意図したページに再びリダイレクトされます。パス (/編集/123)。

同様の質問: Symfony 2 の 2 つの別々のログイン ページ

問題

今の問題は、別のログイン フォームが必要なことです。/minimal_login としましょう。それを security.yml に含める必要がありますが、私が知っている唯一の方法は、別のファイアウォールを作成することです。ドキュメントで見たように、これにより別の識別スキームなので、さまざまなファイアウォールによってログに記録されたユーザーは、同じ保護されたページを共有できないと思いますが、それは私が望んでいることではありません。

何が必要か

ユーザーが /popup 以外の安全なページにアクセスしようとすると、/login にリダイレクトされますが、/popup にアクセスしようとすると (ログに記録されない場合)、/minimal_login にリダイレクトされます。ユーザーがどのようにアプリにログインしても、常に同じアクセスを共有します。つまり、/login または /minimal_login を使用してログインすると、同じページにアクセスできます。


私のセキュリティ.yml

jms_security_extra:
    secure_all_services: false
    expressions: true

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

    providers:
        main:
            entity: {class: Done\PunctisBundle\Entity\User, property: username}

    firewalls:
        dev:
            pattern:  ^/(_(profiler|wdt)|css|images|js)/
            security: false
        main:
            remember_me:
                key: %secret%
                lifetime: 3600
                path: /
                domain: ~
            pattern: ^/
            anonymous: ~
            form_login:
                login_path: /login
                check_path: /login_check
            logout:
                path:   /logout
                target: /


    access_control:
        - { path: ^/login, roles: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: ^/signup, roles: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: ^/verification, roles: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: ^/popup/, roles: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: ^/ajax/track, roles: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: ^/ajax/socialbox, roles: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: ^/$, roles: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: ^/, roles: ROLE_USER }

    encoders:
        Done\PunctisBundle\Entity\User:
            algorithm:   md5
            iterations: 1
            encode_as_base64: false
4

1 に答える 1