Facebook-Callback hat mit dem Anhängen von #_=_
Rautenunterstrich in der Rückgabe-URL
Weiß jemand, warum? Was ist die Lösung?
Facebook-Callback hat mit dem Anhängen von #_=_
Rautenunterstrich in der Rückgabe-URL
Weiß jemand, warum? Was ist die Lösung?
Über Facebooks Plattform-Updates :
Änderung des Umleitungsverhaltens
Diese Woche haben wir damit begonnen, ein Fragment #____=____ in die redirect_uri einzufügen, wenn dieses Feld leer gelassen wird. Bitte stellen Sie sicher, dass Ihre Anwendung dies verarbeiten kann Verhalten umgehen kann.
Um dies zu verhindern, setzen Sie die redirect_uri in Ihrer Login-URL-Anforderung wie folgt: (mit Facebook php-sdk)
$facebook->getLoginUrl(array('redirect_uri' => $_SERVER['SCRIPT_URI'],'scope' => 'user_about_me'));
UPDATE
Die obigen Ausführungen entsprechen genau dem Dokumentation sagt, dies zu beheben. Die von Facebook dokumentierte Lösung funktioniert jedoch nicht. Hinterlassen Sie bitte einen Kommentar auf der Facebook-Plattform-Updates Blog-Beitrag und folgen dieser Fehler um eine bessere Antwort zu erhalten. Bis dahin fügen Sie Ihrem Head-Tag Folgendes hinzu, um dieses Problem zu lösen:
<script type="text/javascript">
if (window.location.hash && window.location.hash == '#_=_') {
window.location.hash = '';
}
</script>
Oder eine ausführlichere Alternative (danke niftylettuce ):
<script type="text/javascript">
if (window.location.hash && window.location.hash == '#_=_') {
if (window.history && history.pushState) {
window.history.pushState("", document.title, window.location.pathname);
} else {
// Prevent scrolling by storing the page's current scroll offset
var scroll = {
top: document.body.scrollTop,
left: document.body.scrollLeft
};
window.location.hash = '';
// Restore the scroll offset, should be flicker free
document.body.scrollTop = scroll.top;
document.body.scrollLeft = scroll.left;
}
}
</script>
TL;DR
if (window.location.hash === "#_=_"){
history.replaceState
? history.replaceState(null, null, window.location.href.split("#")[0])
: window.location.hash = "";
}
Vollversion mit Schritt-für-Schritt-Anleitung
// Test for the ugliness.
if (window.location.hash === "#_=_"){
// Check if the browser supports history.replaceState.
if (history.replaceState) {
// Keep the exact URL up to the hash.
var cleanHref = window.location.href.split("#")[0];
// Replace the URL in the address bar without messing with the back button.
history.replaceState(null, null, cleanHref);
} else {
// Well, you're on an old browser, we can get rid of the _=_ but not the #.
window.location.hash = "";
}
}
Schritt für Schritt:
fragment
es #_=_
.window.replaceState
Methode.
#
und nur den ersten Teil zu nehmen.history
um den aktuellen Seitenstatus durch die saubere URL zu ersetzen. Dadurch wird der aktuelle Verlaufseintrag geändert, anstatt einen neuen zu erstellen. Das bedeutet, dass die Schaltflächen "Zurück" und "Vor" genau so funktionieren, wie Sie es wünschen ;-)#_-_
.Erfahren Sie mehr über history.replaceState
.
Erfahren Sie mehr über window.location
.
Dies wurde von Facebook aus Sicherheitsgründen eingeführt. Hier ist die Erklärung von Eric Osgood, einem Mitglied des Facebook-Teams:
Dies wurde als "by design" gekennzeichnet. weil dadurch eine potenzielle Sicherheitslücke vermieden wird.
Einige Browser fügen das Hash-Fragment einer URL an das Ende einer neuen URL an, an die sie weitergeleitet wurden (wenn diese neue URL nicht selbst ein Hash-Fragment hat).
Wenn zum Beispiel example1.com eine Weiterleitung zu example2.com zurückgibt, dann wird ein Browser, der zu example1.com#abc geht, zu example2.com#abc, und der Hash-Fragment-Inhalt von example1.com wäre für ein Skript auf example2.com zugreifen.
Da es möglich ist, einen Datenfluss auf einen anderen umzuleiten, ist es wäre es möglich, sensible Authentifizierungsdaten von einer App zu einer anderen für eine andere.
Dies wird durch das Anhängen eines neuen Hash-Fragments an die Umleitungs-URL entschärft um dieses Browserverhalten zu verhindern.
Wenn die Ästhetik oder das clientseitige Verhalten der resultierenden URL von Belang sind, wäre es möglich, window.location.hash zu verwenden (oder sogar eine eigene serverseitige Umleitung zu verwenden, um die anstößigen Zeichen zu entfernen.
Fuente: https://developers.facebook.com/bugs/318390728250352/
Wenn Sie das verbleibende "#" aus der Url entfernen möchten
$(window).on('load', function(e){
if (window.location.hash == '#_=_') {
window.location.hash = ''; // for older browsers, leaves a # behind
history.pushState('', document.title, window.location.pathname); // nice and clean
e.preventDefault(); // no page reload
}
})
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.
0 Stimmen
Ich stehe auch vor dem gleichen Problem: stackoverflow.com/q/7190184/912011 Ich denke jedoch, dass es mit der Firefox-Version zusammenhängen könnte.
0 Stimmen
Hat jemand eine Lösung für dieses Problem gefunden? Die Standard-Facebook-Connect-Sdk funktioniert nicht.
0 Stimmen
Das Beste, was wir tun können, bis Facebook diesen Fehler korrigiert (oder ihre Dokumentation) ist in meiner Antwort unten. Erstens, richten Sie Ihre Login-URLs in Übereinstimmung mit der Dokumentation ein. Und zweitens, fügen Sie eine schnelle Header-Javascript-Hack, um dies in Ihrem Code zu vermeiden. Dies wird gut abnehmen, wenn Facebook jemals dieses Problem behebt.
0 Stimmen
Irritierender FB-API-Fehler. Er bremst meine AJAX-Navigation :(
38 Stimmen
Irgendeine Idee wie Facebook fügt diese Zeichen an? Facebook leitet zu meinem Handler weiter, wo ich dann die Umleitung zur Rückgabe-URL verwalte, aber die Zeichen werden immer noch an die URL angehängt.
0 Stimmen
developers.facebook.com/bugs/318390728250352 Dieser Link könnte Sie zum Lachen bringen
6 Stimmen
@BenFoster Ich denke, wenn Sie Fiddler oder ähnliches verwenden, werden Sie feststellen, dass, wenn FB auf Ihren Handler zurückgreift, die
#_=_
vorhanden ist, dann kann man zwar eineResponse.Redirect
zu dem, was Sie eigentlich tun wollen, der Browser behält den Hash bei Deshalb ist es auch nur die Client-seitig unten vorgeschlagene Abhilfemaßnahmen, die funktionieren werden.0 Stimmen
Ich habe noch keine Antwort auf folgende Fragen gefunden por qué wird dies angehängt. Die in diesem Thread enthaltenen Facebook-Posts sind nicht hilfreich.
0 Stimmen
Weiß jemand, warum ich das bekomme und sonst NICHTS?
2 Stimmen
2016 März, passiert immer noch :P
2 Stimmen
April 2016 noch stattfinden. -_-
1 Stimmen
Mai 2016 noch passiert :-)
2 Stimmen
Zu Ihrer Information, es wird nicht behoben werden
25 Stimmen
2017, was zum Teufel
7 Stimmen
Mai 2017, noch....
2 Stimmen
Juni 2017 :) immer noch passiert. #_=_
1 Stimmen
Juli 2017... Blabla... Blabla
1 Stimmen
August 2017 Gleiche Scheiße
1 Stimmen
November 2017, nichts hat sich geändert
1 Stimmen
Dezember 2017, STILL HAPPENING
2 Stimmen
Willkommen im Jahr 2018! Ja, es geht weiter.
1 Stimmen
Februar 2018, der Fehler tritt immer noch auf...
6 Stimmen
März 2018 ja, es geht weiter
2 Stimmen
31. Mai 2018 , #_=_ FTW!
0 Stimmen
27. Juli 2018. Sie findet immer noch statt!
2 Stimmen
1. August 2018 noch stattfinden! :(
0 Stimmen
29. September 2018... Grrr
0 Stimmen
Oktober 2018 findet immer noch statt :(
1 Stimmen
Jan 2019 findet noch statt
1 Stimmen
April 2019 findet noch statt :)
1 Stimmen
August 2019, keine Neuigkeiten zu diesem Thema x)
1 Stimmen
April 2020 und ich sehe es immer noch
0 Stimmen
Weihnachten 2020 findet immer noch statt :(
0 Stimmen
Februar 2021 ist für mich immer noch ein Problem
0 Stimmen
April 2021, v10.0 findet noch statt
0 Stimmen
Für mich sieht das tatsächlich wie ein Browser-Bug aus, denn das #_=_ kommt von der ersten Weiterleitung, aber die zweite Weiterleitung hat keinen Hash, so dass es wie eine Schwachstelle aussieht, dass der Hash, der in einem Satz von Weiterleitungen gegeben wird, auch bei weiteren Weiterleitungen beibehalten wird (solange die letzte keinen Hash hat).
0 Stimmen
Februar 2022, es geht weiter! <(^.^<)
0 Stimmen
Ich habe dich im September 2022 gefunden, denn warum passiert das nicht?