Ich habe benutzerdefinierte Fehlerseiten eingerichtet, die für bestimmte HTTP-Fehler im Ordner angezeigt werden:
app/Resources/TwigBundle/views/Exception/
Die Seite 403 (error403.html.twig
) funktioniert und wird wie erwartet angezeigt.
Die 500-Seite (error500.html.twig
) funktioniert und wird wie erwartet angezeigt.
Die 404-Seite (error404.html.twig
) löst einen 500-Server-Fehler aus:
Schwerwiegender PHP-Fehler: Ungefangene Ausnahme "Symfony\Component\Routing\Exception\ResourceNotFoundException"
Der Fehler wird ausgelöst, indem eine Authentifizierungsprüfung durchgeführt wird, um bestimmte Menüelemente für Benutzer anzuzeigen, die authentifiziert sind oder nicht:
{% if is_granted('IS_AUTHENTICATED_FULLY') %}
Wenn ich dieses Häkchen entferne und nur zulasse, dass alle Menüelemente angezeigt werden, lädt die Seite die Fehlerseite wie erwartet. Auch hier wird die Seite 403 so angezeigt, wie sie sollte, und die Authentifizierungsprüfungen werden problemlos ausgeführt.
Ich stecke in diesem Fall fest. Die Seiten sind bis auf den Dateinamen genau gleich.
Sie können den is_granted
in einer 404-Seite seit 2.1 nicht mehr verwenden:
Es ist in der Upgrade-Datei erwähnt
Der Firewall-Listener ist jetzt nach dem Router-Listener registriert. Dies bedeutet, dass für bestimmte Firewall-URLs (z. B./login_check und/logout) in Ihrer Routing-Konfiguration jetzt die richtigen Routen definiert sein müssen. Wenn Sie eine benutzerdefinierte 404-Fehlerseite haben, stellen Sie außerdem sicher, dass Sie keine sicherheitsrelevanten Funktionen wie
is_granted
verwenden.
Siehe: https://github.com/symfony/symfony/blob/master/UPGRADE-2.1.md#security
Wenn symfony <2.8:
{% if app.user is not null and is_granted('ROLE_ADMIN') %}
Siehe: https://github.com/symfony/symfony-docs/issues/2078
Edit vom 17. Dezember 15:
Dies wird seit 2.8 nicht mehr benötigt.
{% if is_granted('ROLE_ADMIN') %}
funktioniert jetzt gut.
Ich würde vorschlagen, nach app.security.token
zu suchen, um strenger zu sein, und nach true
auszuwerten, selbst wenn der Benutzer anonym ist.
Wenn Sie nach app.user
suchen, wird false
in Ausnahmevorlagen ausgewertet, aber auch dann, wenn die Firewallvorhanden ist (= reguläre Vorlagen), der Benutzer jedoch nicht angemeldet ist. Dadurch wird beispielsweise die Anzeige einer Anmeldeschaltfläche verhindert.