私はSymfonyクックブックに従っており、「一般的な落とし穴を回避する」には次のように書かれています:
また、ファイアウォールで匿名ユーザー (キーなし) が許可されていない場合
anonymous
は、ログイン ページで匿名ユーザーを許可する特別なファイアウォールを作成する必要があります。firewalls: # order matters! This must be before the ^/ firewall login_firewall: pattern: ^/login$ anonymous: ~ secured_area: pattern: ^/ form_login: ~
したがってsecurity.yml
、次のようにファイルを実装しました。
security:
providers:
in_memory:
memory:
users:
ryan:
password: pass1
roles: ROLE_USER
admin:
password: pass2
roles: ROLE_ADMIN
encoders:
Symfony\Component\Security\Core\User\User: plaintext
firewalls:
dev:
pattern: ^/(_(profiler|wdt)|css|images|js)/
security: false
login_firewall:
anonymous: ~
pattern: ^/login$
context: foo
main:
pattern: ^/
form_login:
login_path: /login
check_path: /login
default_target_path: /secret
logout:
path: /logout
target: homepage
context: foo
access_control:
- { path: ^/login, roles: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/secret, roles: ROLE_ADMIN }
問題は、ログインしようとするとログイン ページにリダイレクトされ、認証されないことです。また、2 つのファイアウォール間でコンテキストを共有しようとしました (つまり、同じ を使用していますcontext
) が、プラスの効果はありませんでした。
この構成の何が問題になっていますか?
編集:
これは私のlogin.html.twig
テンプレートです:
<html>
<body>
{% if error %}
<div>{{ error.messageKey | trans(error.messageData, 'security') }}</div>
{% endif %}
<form action="{{ path('login') }}" method="post">
<label for="username">Username:</label>
<input type="text" id="username" name="_username" value="{{ last_username }}" />
<label for="password">Password:</label>
<input type="password" id="password" name="_password" />
<button type="submit" >Login</button>
</form>
</body>
</html>