2012-06-23 27 views
11

django-social-auth przekierowuje mnie do /mypage#_=_ podczas korzystania z backendu Facebook.Jak pozbyć się # _ = _ w przekierowaniu na facebooku django-social-auth?

Ponieważ pracuję z jquery mobile z przodu, nie mogę tego zaakceptować.

Znalazłem: https://developers.facebook.com/blog/post/552/ na stronie dla programistów Facebooka.

Zmiana Sesja Przekierowanie Zachowanie

tym tygodniu zaczęliśmy dodanie fragmentu # _ = _ do redirect_uri gdy to pole jest puste. Upewnij się, że Twoja aplikacja obsługuje to zachowanie: .

Tak więc spróbowałem ustawić SOCIAL_AUTH_LOGIN_REDIRECT_URL w ustawieniach django-social-auth na coś "pustego". Bez powodzenia

Jak więc pozbyć się hasha?

Wielkie dzięki!

+0

Czy próbowałeś usunąć tę część za pomocą HTMLParser lub przez regex? –

+0

NIE Nie, ponieważ myślę, że to byłby po prostu "hack", ale i tak ... wydaje mi się, że muszę to zrobić w ten sposób :( – wzr1337

+1

Kiedy Facebook powiedział: "Upewnij się, że twoja aplikacja poradzi sobie z tym zachowaniem." Myślę, że mają na myśli to, że nie ma flagi do skonfigurowania tego na końcu FB :) :) –

Odpowiedz

14

No, może nie być dokładne rozwiązanie, ale dodając następujący skrypt aby udać pomogłoby w rozwiązaniu problemu:

<script type="text/javascript"> 
    if (window.location.hash == '#_=_') { 
     window.location.hash = ''; 
    } 
</script> 
+5

To nie rozwiązuje problemu, to tylko hack. – commadelimited

7

Wygląda Facebook zawsze dopisuje „# _ = _”, nawet jeśli redirect_uri jest dostarczane. Ponieważ to zachowanie jest sprzeczne z Facebookiem blog post, ta funkcja została przesłana do Facebooka jako bug. Facebook dostarczył oficjalną odpowiedź na ten błąd, twierdząc, że dodanie "# _ = _" jest cechą konstrukcyjną, która zapobiega potencjalnej luce bezpieczeństwa.

Facebook oferuje następujące porady dotyczące radzenia sobie z niechcianym fragmentem uri: "Jeśli estetyka lub zachowanie po stronie klienta, wynikowego adresu URL budzi niepokój, możliwe byłoby użycie window.location.hash (lub nawet przekierowanie po stronie serwera), aby usunąć obraźliwe znaki. "

Wygląda na to, że powyższy javascript jest prawidłowym rozwiązaniem, nawet jeśli jest trochę hacky.

0
<script type="text/javascript"> 
    if (window.location.href.indexOf('#') > -1) { 
     window.location.href = '/'; 
    } 
</script>