2016-11-17 4 views
6

Wenn ich eine Seite URL von meiner Website wie mysite.com/page1#foo=bar teilen möchte, oder ich möchte diese Seite besuchen, wenn ich ausgeloggt bin, bin ich auf das login Formular als page1 weitergeleitet Route ist in der auth middleware.Laravel - Login Redirect verliert die URL Hash

Mein Problem ist, dass, nachdem ich mich erfolgreich angemeldet habe, ich zu mysite.com/page1 umgeleitet werde und ich den Hash-Wert verliere.

(der Hash-Wert auch gehalten wird, nicht auf die /login)

Gibt es eine einfache Art und Weise durch Laravel vorgesehen, um den Hash zu halten? Da der Hash nicht an den Server gesendet wird, bezweifle ich es, aber vielleicht gibt es etwas, was ich irgendwo verpasst habe!

Sonst würde ich brauche das Login zu überschreiben, vielleicht den Hash mit JS lesen und irgendwie wieder injiziert es in der Umleitung nach der Anmeldung, sondern ganz zu vermeiden, wie zu tun, dass, wenn es eine einfache Art und Weise :)

+2

Ja, ich wollte gerade das th. Sagen e '# fragment' wird nicht an den Server gesendet. Da die Middleware einsetzt und Sie umleitet, bevor Sie einen clientseitigen Code ausführen können, bin ich mir nicht sicher, wie Sie vorgehen würden. Der Weg, um es zu umgehen denke ich wäre, die Middleware zu entfernen und JS zu verwenden, um das Fragment an den Server zu übergeben, wenn Sie erkennen, dass Sie umleiten müssen. – Jonathon

+1

Alternativ können Sie die Middleware "auth" möglicherweise so ändern, dass sie nicht umleitet, und stattdessen eine Ansicht zurückgibt, in der Sie Ihren clientseitigen Code hinzufügen, das Fragment beibehalten und dann die Umleitung mit JS durchführen können. – Jonathon

+0

klingt wie eine gute Annäherung! Ich werde untersuchen und versuchen, einen Weg zu finden, das zu tun! Wenn ich zu '/ login # foo = bar komme, sollte ich gut gehen! – mokk

Antwort

1

Dank zugreifen konnte ich bekommen auf den Grund. Nicht sicher, es ist die beste Implementierung, aber es scheint zu funktionieren.

Grundsätzlich einzufügen I den Hash-Wert in der Form, wie Mruf vorgeschlagen, und dann verlängert die handleUserWasAuthenticated Funktion in AuthController

login.blade.php

<script type="text/javascript" > 
    $(document).ready(function() { 
    $('.urlHash').val(window.location.hash); 
    }); 
</script> 

<form id="login-form" role="form" method="POST" action="{{ url('/login') }}"> 
    <input type="hidden" class="form-control urlHash" name="urlHash" value=""> 
    .... 
</form> 

AuthController.php

protected function handleUserWasAuthenticated(Request $request, $throttles) 
{ 
    if ($throttles) { 
     $this->clearLoginAttempts($request); 
    } 

    if (method_exists($this, 'authenticated')) { 
     return $this->authenticated($request, Auth::guard($this->getGuard())->user()); 
    } 

    // old code: return redirect()->intended($this->redirectPath()); 

    $newRequest = redirect()->intended($this->redirectPath()); 
    $newRequest->setTargetUrl($newRequest->getTargetUrl() . $request->urlHash); 

    return $newRequest; 
} 
2

Ein einfaches JavaScript den Trick tun würde:

$("#login-form").submit(function(){ 
    e.preventDefault(); 
    $(this).append("<input type='hidden' name='hash' value='"+window.location.hash+"'"); 

    $(this).submit(); 
}); 

Jetzt können Sie den Hash innerhalb Ihrer Anfrage Objekt

function controllerAction(Request $request){ 
    $hash = $request->get("hash"); 
    // Parse Hash 
    .... 
    // Redirect to somewhere 
    .... 
} 
zu Mruf Richtung
+0

Ich dachte daran, ähnliches zu tun, aber das ist nur 50% des Prozesses, denke ich. Deine Lösung würde bedeuten, dass ich auf "/ login # foo = far" stehe, was ich nicht bin. Sobald ich jedoch dort angekommen bin, sollte Ihre Lösung den Trick machen! – mokk

+0

Sieht so aus, als ob ich mich verwirrt habe, verschiedene URLs zu testen. Es sieht so aus, als würde es tatsächlich zu '/ login # foo = bar' umleiten, so dass es die Lösung halten könnte, wenn es den Hashwert hält! – mokk

+0

eine andere Lösung wäre '$ (window) .on ('hashchange', function() {// Hash mit Ajax an Server übergeben});' also immer, wenn der Hash geändert wird, senden Sie es an den Server und beharren in die Sitzung. Es ist ungetestet, also ... – Mruf