web-dev-qa-db-ja.com

404エラーページの表示中にSymfony2is_granted( 'IS_AUTHENTICATED_FULLY')が発生し、ResourceNotFoundExceptionが発生します

フォルダ内の特定の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ページは正常に表示され、問題なく認証チェックを利用します。

私はこれで立ち往生しています。ファイル名を除けば、ページはまったく同じです。

19
Nick

2.1以降、404ページでis_grantedを使用することはできません。

アップグレードファイルに記載されています

これで、ファイアウォールリスナーがルーターリスナーの後に登録されます。つまり、特定のファイアウォールURL(/ login_checkや/ logoutなど)には、ルーティング構成で適切なルートが定義されている必要があります。また、カスタム404エラーページがある場合は、is_grantedなどのセキュリティ関連機能を使用していないことを確認してください。

参照: https://github.com/symfony/symfony/blob/master/UPGRADE-2.1.md#security

12
Jeroen

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') %}

現在は正常に動作しています。

ソース: http://symfony.com/blog/new-in-symfony-2-8-dx-improvements#allow-to-check-for-security-even-in-pages-not-covered- by-firewalls

15
Tseho

ユーザーが匿名の場合でも、app.security.tokenをより厳密にチェックし、trueと評価することをお勧めします。

app.userをチェックすると、例外テンプレートでfalseが評価されますが、ファイアウォール存在する(=通常のテンプレート)が、ユーザーが存在しない場合でも評価されます。ログに記録されます。これにより、たとえば、ログインボタンが表示されなくなります。

参照: https://github.com/symfony/symfony-docs/pull/2359

2
bozma88