2017-11-11 4 views
1

Ich versuche, Benutzer zum letzten Link nach dem Login über gmail zu umleiten, fbWie zum letzten Link nach dem Login von google in PHP umleiten?

Hier sind die vier Dinge, die ich versucht, aber nicht Erfolg

1) Benutzer $_SERVER['HTTP_REFERER'] Aber es umleiten mich zurück zu gmail stattdessen bekam der letzte Link auf meiner Website.

2) Mit $_SESSION - Ich versuche, letzte URL in Sitzung vor dem Login zu speichern, aber nach dem Login bekomme ich nicht seinen Wert als Sitzung leer war.

3) Unter Verwendung von Cookies - ich versucht, auch Cokkies aber es ist auch nicht funktioniert

4) Ich versuche zu senden letzte URL als $_GET Parameter in Redirect-URL aber tun, dass stoppt Google Login wie url nicht überein mit URL in der Google App gespeichert.

Gibt es einen anderen Weg es zu erreichen?

Antwort

1

Ich kann nicht sehen, warum die Verwendung von Cookies nicht funktionieren würde. Bevor Sie den Benutzer zum Autorisierungsserver weiterleiten, speichern Sie die aktuelle URL in einem Cookie. Wenn der AS den Benutzer zurück an die Adresse redirect_uri umleitet, führt diese Seite eine weitere Weiterleitung zu der im Cookie gespeicherten URL durch.

Aber ich mag die Version, wo Sie die "letzte Seite URL" in der Anfrage besser (das vierte Element auf Ihrer Liste) enthalten. Da Google in der OAuth-Konfiguration offenbar keine Platzhalter zulässt, können Sie stattdessen den Parameter state verwenden. Von RFC 6749 - The OAuth 2.0 Authorization Framework:

state 
    RECOMMENDED. An opaque value used by the client to maintain 
    state between the request and callback. The authorization 
    server includes this value when redirecting the user-agent back 
    to the client. The parameter SHOULD be used for preventing 
    cross-site request forgery as described in Section 10.12. 

Wenn Sie Ihre Umleitungs-URL bauen, Sie setzen einfach die state Parameter wie folgt:

https://accounts.google.com/o/oauth2/v2/auth 
    ?client_id=MY_CLIENT_ID 
    &redirect_uri=http://example.com/oauth-redirect_uri 
    &scope=REQUESTED_SCOPES 
    &state=http://example.com/last-page-the-user-loaded 

auf OAuth Fluss Je wird der Autorisierungsserver die Benutzer zu einer URL umleiten, die das sieht ein wenig wie bei erfolgreicher Zulassung:

http://example.com/oauth-redirect_uri 
    ?code=CODE 
    &state=http://example.com/last-page-the-user-loaded 

Ihr Server kann die state Parameter dann verarbeiten und leiten Sie den Benutzer entsprechend um.

+0

Danke für Ihre Antwort @ Paolo Ich werde dies versuchen und lassen Sie wissen, ob es funktioniert oder nicht. –

+0

Danke, dass State Parameter Lösung für Google Login funktioniert .. gibt es solche Parameter in Facebook Login auch? da ich dort keine Zustandsparameter finde –

+0

Wenn sie dem OAuth-Protokoll folgen und es vollständig implementiert haben, sollte dies genauso funktionieren wie bei Google. Aber ich weiß nichts über Facebook Login, sorry. – paolo

1

Sie würden prüfen, ob der Benutzer mit einer Funktion angemeldet ist oder nicht, und wenn nicht, würden Sie den Benutzer zur Anmeldeseite führen, auf der sich der Benutzer mit Google oder FB anmelden kann. dies Unter der Annahme, Ich würde sagen, speichern Sie den vorherigen Link in SESSION in der gleichen Funktion, in der Sie überprüft werden, ob der Benutzer angemeldet ist oder nicht ist,

ich den Code-Snippet schreibe und Sie können Idee von ihm erhalten um deinen spezifischen Code zu schreiben.

if(isset($_SERVER['HTTP_REFERER'])) 
{ 
    $_SESSION['url_to_go'] = $_SERVER['HTTP_REFERER']; 
} 

Und nachdem sich der Benutzer erfolgreich in, überprüfen, ob der Sitzungsschlüssel url_to_go vorhanden ist, dann leiten Sie den Benutzer auf den Link oder aber nehmen ihn oder eine Standardseite Armaturenbrett Sie haben.

So wie Sie sagten, die Sitzung wird gelöscht, wenn wir von der sozialen Website zurückkehren, können Sie localStorage mit JS (browser storage) $_SERVER['HTTP_REFERER'] speichern und wenn Sie zurückkommen, können Sie es abrufen und löschen Sie nach Ihnen benutze es einmal.

+0

Es gibt keine Login-Seite Es gibt ein Popup mit fb/google Login-Buttons in der Kopfzeile auf jeder Seite. Ich versuchte mit der Sitzung, aber $ SESSION gelöscht nach der Rückkehr aus sozialen Medien –

+0

ok @VinitSingh, ich habe meine Antwort mit einer alternativen Lösung aktualisiert. Lesen Sie den letzten Absatz –

+0

@VinitSingh, haben Sie es versucht? –

Verwandte Themen