2016-07-21 6 views
2

Ich versuche, den Benutzernamen des angemeldeten Benutzers auf der 404-Fehlerseite zu bekommen, wie die symfony docs sagt;Symfony: Get logged user in 404 Fehler Seite

Alles funktioniert in Dev, aber in der Produktion wird der Benutzer immer nicht protokolliert. Jede If-Bedingung schlägt fehl.

In this discussion fand ich dies:

Die Ursache für dieses Problem ist, dass Routing vor dem Sicherheitsbereich durchgeführt wird. Wenn ein 404-Fehler auftritt, wird die Sicherheitsschicht nicht geladen und damit

So ... kann möglich sein, den angemeldeten Benutzer in Zweig Ausnahme Seite zu bekommen?

aktualisieren

Es sieht aus wie es ein gewünschtes Verhalten ist: https://github.com/symfony/symfony/issues/8414#issuecomment-23661839

Diese hack kann "lösen", aber es ist wirklich hässlich ...

Antwort

3

Die einzige Lösung, die ich so weit fanden diese:

routing.yml (muss die letzte Regel sein)

pageNotFound: 
    pattern: /{path} 
    defaults: { _controller: MyContentBundle:PageNotFound:pageNotFound, path: '' } 
    requirements: 
     path: .* 

die Controller-Aktion

public function pageNotFoundAction() 
    { 
     throw new NotFoundHttpException(); 
    } 

Reference

Ich hoffe, eine bessere Lösung zu finden

+0

funktionierte für mich, wenn ich 'path:/{path}' anstelle von 'pattern:/{path}' mit symfony 3 nutze –

0

EDIT: Leider ist dieses Werk für alle Fehlerseiten außer 404, so ist dies nicht die richtige Antwort. Lassen Sie dies nur als Referenz.

Ursprüngliche Antwort: Dies funktioniert für mich:

{% if app.user %} 
    {{ app.user.username }} 
{% endif %} 

is_granted('IS_AUTHENTICATED_FULLY') nur richtig sein, wenn Sie in dieser Sitzung protokolliert:

IS_AUTHENTICATED_FULLY ist tatsächlich stärker. Sie haben dies nur, wenn Sie sich während dieser Sitzung tatsächlich angemeldet haben. Wenn Sie eingeloggt sind, weil Sie sich an einen Cookie erinnern, haben Sie das nicht. https://knpuniversity.com/screencast/symfony2-ep2/twig-security-is-authenticated

+0

Ja, Sie haben Recht über „IS_AUTHENTICATED_FULLY“ sind, habe ich geschrieben, diesem Beispiel, aber es funktioniert nicht, auch mit „IS_AUTHENTICATED_REMEMBERED“. Wie auch immer ... welche Version von Symfony verwendest du? Ich habe den 3.0-Zweig und es funktioniert nicht. Bist du in prod oder dev? In dev funktioniert es, prod no – Filo

+0

Eine andere Frage: Haben Sie versucht mit einer zufälligen URL wie "/ dfdsusdhuasd" oder eine nicht gefundene Exception in einem Controller zu generieren? – Filo

+1

Getestet 2.8 und 3 scheint, dass app.user für alle Fehlerseiten ** außer 404 ** geladen ist. Ich kann also nicht sagen, dass ich mehr Erfahrung damit habe, aber der Hack, den Sie gefunden haben, scheint tatsächlich nicht so hässlich zu sein. Vor allem, wenn Sie die Ausnahmebedingungsnachricht ähnlich wie die ursprüngliche Nachricht senden. Lass uns wissen, ob du einen besseren Weg findest, oder benutze den Hack :) –