517 Stimmen

Facebook Callback fügt '#_=_' an die Rückgabe-URL an

Facebook-Callback hat mit dem Anhängen von #_=_ Rautenunterstrich in der Rückgabe-URL

Weiß jemand, warum? Was ist die Lösung?

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.

3voto

rebelliard Punkte 9472

Mit Angular und Angular Ui Router, können Sie dieses Problem beheben

    app.config(function ($stateProvider, $urlRouterProvider, $locationProvider) {

      // Make a trailing slash optional for all routes
      // - Note: You'll need to specify all urls with a trailing slash if you use this method.
      $urlRouterProvider.rule(function ($injector, $location) {
        /***
        Angular misbehaves when the URL contains a "#_=_" hash.

        From Facebook:
          Change in Session Redirect Behavior
          This week, we started adding a fragment #_=_ to the redirect_uri when this field is left blank.
          Please ensure that your app can handle this behavior.

        Fix:
          http://stackoverflow.com/questions/7131909/facebook-callback-appends-to-return-url#answer-7297873
        ***/
        if ($location.hash() === '_=_'){
          $location.hash(null);
        }

        var path = $location.url();

        // check to see if the path already has a slash where it should be
        if (path[path.length - 1] === '/' || path.indexOf('/?') > -1) {
          return;
        }
        else if (path.indexOf('?') > -1) {
          $location.replace().path(path.replace('?', '/?'));
        }
        else {
          $location.replace().path(path + '/');
        }
      });

      // etc ...
    });
});

3voto

Slawomir Punkte 2868

Wenn Sie vue-router verwenden, können Sie an die Liste der Routen anhängen:

{
  path: '/_=_',
  redirect: '/', // <-- or other default route
},

2voto

Dhiren Patel Punkte 645

Kürzlich wurde eine Änderung in der Art und Weise eingeführt, wie Facebook Sitzungsumleitungen handhabt. Siehe "Änderung des Verhaltens bei der Sitzungsumleitung" in der dieswöchigen Operation Entwicklerliebe Blog-Post für die Ankündigung.

2voto

Eng Cy Punkte 1483

Für mich mache ich eine JavaScript-Umleitung auf eine andere Seite, um die #_=_ . Die folgenden Ideen sollten funktionieren :)

function redirect($url){
    echo "<script>window.location.href='{$url}?{$_SERVER["QUERY_STRING"]}'</script>";        
}

1voto

Ivo Smits Punkte 207

Ein Workaround, der bei mir funktioniert hat (unter Verwendung von Backbone.js), war das Hinzufügen von "#/" am Ende der an Facebook übergebenen Weiterleitungs-URL. Facebook wird das bereitgestellte Fragment behalten und nicht sein eigenes "_=_" anhängen.

Nach der Rückkehr entfernt Backbone den "#/"-Teil. Für AngularJS sollte das Anhängen von "#!" an die Rückgabe-URL funktionieren.

Beachten Sie, dass die Fragmentkennung der ursprünglichen URL bei der Weiterleitung (über die HTTP-Statuscodes 300, 301, 302 und 303) von den meisten Browsern beibehalten wird, es sei denn, die weitergeleitete URL hat ebenfalls eine Fragmentkennung. Diese scheint ein empfohlenes Verhalten zu sein .

Wenn Sie ein Handler-Skript verwenden, das den Benutzer an eine andere Stelle weiterleitet, können Sie hier "#" an die Weiterleitungs-URL anhängen, um den Fragmentbezeichner durch eine leere Zeichenfolge zu ersetzen.

CodeJaeger.com

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.

Powered by:

X