2016-04-29 11 views
0

ich eine Middleware-Gruppe haben wie folgt definiert:Laravel Authentifizierung auf Backpaging durch die Geschichte

Route::group(['middleware' => 'auth'], function() { 
    Route::get('home', '[email protected]'); 
    Route::get('create','[email protected]'); 
    Route::get('settings', '[email protected]'); 
); 

Wenn jemand abmeldet ich sie auf die Login-Seite umleiten aufrufen i dann die Auth :: Logout(), die, weil sie gut funktioniert kann dann nicht mehr durch die Site navigieren.

Das Problem ist, dass, wenn Sie durch den Browser-Verlauf zurückgehen, dann rückwärts durch die Website navigieren können, aber sie werden rausgeschmissen, wenn sie auf einen Link klicken, um zu versuchen, durch die Website zu navigieren.

Ein Beispiel wäre, Im auf der Homepage und dann log ich mich aus. Ich klicke auf die Rücktaste und gehe zurück zur Startseite. Dann versuche ich auf einen Link auf der Homepage zu klicken, der mich authentifizieren muss. Ich werde rausgeschmissen ... aber ich hätte nicht in der Lage sein, in meine Geschichte zurückzuspeichern, um zur Homepage zurückzukehren.

Wenn dies nicht klar ist, kann ich weiter Code erarbeiten oder beweisen. Ich bin auf Laravel 5.0

+0

Sie können dieses Problem beheben, indem Sie eine Cache-Steuerkopfeinstellung, in der Regel von einer Middleware, würden Sie rufen: '$ response-> Kopfzeilen können> festgelegt ('Cache-Control',‚no-cache, no-store , max-age = 0, must-revalidate ', true); ' – Jacco

Antwort

0

In den meisten Fällen (wenn nicht alle), löst das Drücken der Zurück-Taste keine neue Anfrage aus, daher wäre die einzige Möglichkeit, eine "Sperre" zu implementieren, auf der Client-Seite via Javascript (oder Geschmack davon).

Wahrscheinlich verwenden Sie Blade und ein Master-Layout, also fügen Sie einfach Javascript ein, das eine Änderung des Fensters auf jeder Seite Ihrer Website erkennt. Führen Sie bei der (Neu-) Eingabe einen Ajax-Aufruf an Ihren Server aus, der basierend auf ihrem Anmeldestatus true/false zurückgibt. Wenn sie nicht angemeldet sind, verwenden Sie JS, um zur Anmeldeseite umzuleiten.

Eine Sache zu beachten: Jeder mit JS Kenntnissen könnte diese "Überprüfung" leicht umgehen, aber es würde seinen Zweck für die meisten Benutzer auf Ihrer Website erfüllen. Glücklicherweise bedeutet dies, dass ein Benutzer die Seite genau so sehen kann, wie sie sie gesehen hat, bevor sie sich angemeldet haben. Zu diesem Zeitpunkt gibt es keine Auswirkungen auf die Sicherheit.

+0

Danke, das scheint wie eine gute Arbeit für jetzt werde ich es versuchen und lassen Sie wissen, ob es gut funktioniert, aber es scheint wie eine kurze Zeit schnell beheben, da es sich um eine clientseitige Implementierung handelt. DANKE :-) – Mikecit22

1

Dies ist nicht wirklich ein Problem mit Laravel, es ist nur Web-Browser-Verhalten.

Wie Sie erwähnt haben, klicken Sie auf einen Link zu einer geschützten Seite nach dem Abmelden, wirft Sie mit Zugriff verweigert, was bedeutet, dass Laravel Middleware perfekt funktioniert.

Ich glaube, dass Sie dieses Browserverhalten auf Clientseite mithilfe von JavaScript steuern können.

Oder

Sie können Header aller Ihrer Sperrgebiet ändern Sie den Browser der Inhalt informieren muss nicht zwischengespeichert werden.

Oder

Sie können dies auf den HTML-Kopf hinzufügen Tag von allen Seiten, die Sie nicht in dem Cache mögen.

<meta http-equiv="cache-control" content="private, max-age=0, no-cache"> 

<meta http-equiv="pragma" content="no-cache"> 

<meta http-equiv="expires" content="0"> 
+0

Das ist eine tolle Information, danke. Das Problem ist, dass es im Cache gespeichert wird. Ich habe versucht, die Meta-Tags, aber das Problem scheint zu bestehen. Der Grund, warum ich den Cache kenne ist, dass wenn ich mich abmelde und dann den Cache lösche, kann ich nicht zurücksellen, weil die Weiterleitung auslöst.Ich werde damit herumspielen müssen, aber danke, dass du mich auf den richtigen Weg über die Cached-Ansicht gelenkt hast :-) – Mikecit22