バックグラウンド
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