2016-05-10 10 views
2

Das macht mich seit Wochen verrückt: Wie kann ich Sitzungen auf der 404-Seite verfügbar machen? Ich habe nur die 404-Fehlerseite in meine Standardvorlage einbetten. Es zeigt auch die Navbar und die Fußzeile, aber wie kann ich meinen Benutzer angemeldet bleiben, wenn auf einem 404?Laravel 5: Sitzungen auf 404 Route

Auf einem 404 gibt Auth :: check() immer false zurück und alle anderen whats session specific ist null oder leer.

Wie aktiviert man Sitzungen auf (404) Fehlerseiten?

+0

Haben Sie eine Antwort schon gefunden? Ich habe genau das gleiche Problem. –

+0

@RobinvanBaalen Leider nicht :( – mrHooty

Antwort

4

Was können Sie tun, ist, in der App/http/Kernel.php den follwing Codeblock hinzu:

\Illuminate\Session\Middleware\StartSession::class, 
    \Illuminate\View\Middleware\ShareErrorsFromSession::class, 

Inside the $ Middleware-Variable. So würde es aussehen:

protected $middleware = [ 
    \Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class, 
    \Illuminate\Session\Middleware\StartSession::class, 
    \Illuminate\View\Middleware\ShareErrorsFromSession::class, 
    ]; 

Es funktionierte für mich, ich hoffe, es funktioniert auch für Sie.

+0

Danke. Können Sie bitte erklären, warum es ohne es nicht funktioniert, und welchen Unterschied diese Änderung macht? –

+0

Diese Änderung wird die Session-Middleware zu jeder Anfrage hinzufügen. Wenn Sie eine zustandslose API-Schicht wie wir tun dann das ist nicht die lösung, weil sessions zu ihren API requests auch hinzugefügt werden .. –

1

Nur um ein wenig über die vorhandene Antwort zu erweitern: stellen Sie sicher, diese Middleware von $ middlewareGroups zu entfernen, wenn es auch dort ist, also wenden Sie die Middleware nicht zweimal an.

Sie werden mit etwas am Ende wie folgt:

protected $middleware = [ 
    \Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class, 
    \Illuminate\Foundation\Http\Middleware\ValidatePostSize::class, 
    \App\Http\Middleware\TrimStrings::class, 
    \Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class, 
    \Illuminate\Session\Middleware\StartSession::class, 
    \Illuminate\Session\Middleware\AuthenticateSession::class, 
    \Illuminate\View\Middleware\ShareErrorsFromSession::class, 
]; 

protected $middlewareGroups = [ 
    'web' => [ 
     \App\Http\Middleware\EncryptCookies::class, 
     \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class, 
     //\Illuminate\Session\Middleware\StartSession::class, 
     //\Illuminate\Session\Middleware\AuthenticateSession::class, 
     //\Illuminate\View\Middleware\ShareErrorsFromSession::class, 
     \App\Http\Middleware\VerifyCsrfToken::class, 
     \Illuminate\Routing\Middleware\SubstituteBindings::class, 
    ], 

    'api' => [ 
     'throttle:60,1', 
     'bindings', 
    ], 
]; 

Soweit mein Verständnis geht so verursacht wurde, weil die Middleware, die mit der Sitzung beschäftigt, durch wurde nur unter der Web-Gruppe ist, angewandt wird, Diese Seiten werden in der web.php weitergeleitet. Und da die standardmäßige Fehlerbehandlung nicht zu einer gerouteten Seite umleitet, hatten wir keinen Zugriff auf die Sitzung.

Auf diese Weise wird die Middleware auf alle Seiten angewendet, nicht nur auf diejenigen, die auf der web.php geroutet werden, einschließlich der Fehler.

Ich fand ursprünglich die soution here, aber dauerte eine Weile, um zu verstehen, warum dies geschah (dachte ich kalt habe alles falsch verstanden, fühlen Sie sich frei, dies zu bestätigen oder zu korrigieren).

Hoffe es hilft, es funktioniert für mich auf Laravel 5.4

+0

diese lösung hält mich abmelden – Emad