フォルダ内の特定のHTTPエラーを表示するカスタムエラーページを設定しました。
app/Resources/TwigBundle/views/Exception/
403ページ(error403.html.twig
)期待どおりに機能し、表示されます。
500ページ(error500.html.twig
)期待どおりに機能し、表示されます。
404ページ(error404.html.twig
)500サーバーエラーをスローします:
PHPの致命的なエラー:キャッチされない例外 'Symfony\Component\Routing\Exception\ResourceNotFoundException'
認証されている、または認証されていないユーザーの特定のメニュー項目を表示するために認証チェックを実行すると、エラーがスローされます。
{% if is_granted('IS_AUTHENTICATED_FULLY') %}
そのチェックを外し、すべてのメニュー項目の表示を許可すると、ページは期待どおりにエラーページをロードします。繰り返しになりますが、403ページは正常に表示され、問題なく認証チェックを利用します。
私はこれで立ち往生しています。ファイル名を除けば、ページはまったく同じです。
2.1以降、404ページでis_granted
を使用することはできません。
アップグレードファイルに記載されています
これで、ファイアウォールリスナーがルーターリスナーの後に登録されます。つまり、特定のファイアウォールURL(/ login_checkや/ logoutなど)には、ルーティング構成で適切なルートが定義されている必要があります。また、カスタム404エラーページがある場合は、
is_granted
などのセキュリティ関連機能を使用していないことを確認してください。
参照: https://github.com/symfony/symfony/blob/master/UPGRADE-2.1.md#security
Symfony <2.8の場合:
{% if app.user is not null and is_granted('ROLE_ADMIN') %}
参照: https://github.com/symfony/symfony-docs/issues/2078
2015年12月17日から編集:
これは2.8以降は不要になりました。
{% if is_granted('ROLE_ADMIN') %}
現在は正常に動作しています。
ユーザーが匿名の場合でも、app.security.token
をより厳密にチェックし、true
と評価することをお勧めします。
app.user
をチェックすると、例外テンプレートでfalse
が評価されますが、ファイアウォールが存在する(=通常のテンプレート)が、ユーザーが存在しない場合でも評価されます。ログに記録されます。これにより、たとえば、ログインボタンが表示されなくなります。