Le rappel de Facebook a commencé à ajouter #_=_
underscore de hachage à l'URL de retour
Est-ce que quelqu'un sait pourquoi? Quelle est la solution?
Le rappel de Facebook a commencé à ajouter #_=_
underscore de hachage à l'URL de retour
Est-ce que quelqu'un sait pourquoi? Quelle est la solution?
Via Mises à jour de la plateforme Facebook:
Changement dans le comportement de redirection de session
Cette semaine, nous avons commencé à ajouter un fragment #____=____ à l'URL de redirection lorsque ce champ est laissé vide. Veuillez vous assurer que votre application peut gérer ce comportement.
Pour éviter cela, définissez l'URL de redirection dans votre demande d'URL de connexion comme ceci : (en utilisant Facebook php-sdk)
$facebook->getLoginUrl(array('redirect_uri' => $_SERVER['SCRIPT_URI'],'scope' => 'user_about_me'));
MISE À JOUR
Le paragraphe ci-dessus est exactement comme le documentation dit de fixer cela. Cependant, la solution documentée par Facebook ne fonctionne pas. Veuillez envisager de laisser un commentaire sur le blog des mises à jour de la plateforme Facebook et suivez ce bogue pour obtenir une meilleure réponse. En attendant, ajoutez ce qui suit à votre balise head pour résoudre ce problème :
if (window.location.hash && window.location.hash == '#_=_') {
window.location.hash = '';
}
Ou une alternative plus détaillée (merci à niftylettuce) :
if (window.location.hash && window.location.hash == '#_=_') {
if (window.history && history.pushState) {
window.history.pushState("", document.title, window.location.pathname);
} else {
// Empêcher le défilement en stockant la position actuelle du défilement de la page
var scroll = {
top: document.body.scrollTop,
left: document.body.scrollLeft
};
window.location.hash = '';
// Restaurer la position de défilement, devrait être sans scintillement
document.body.scrollTop = scroll.top;
document.body.scrollLeft = scroll.left;
}
}
Je rencontre également des problèmes avec cela, en utilisant Java cependant, mais le problème de hachage est néanmoins présent.
D'accord. Si vous rencontrez ce problème, veuillez commenter la mise à jour de la plateforme Facebook : developers.facebook.com/blog/post/552
TL;DR
if (window.location.hash === "#_=_"){
history.replaceState
? history.replaceState(null, null, window.location.href.split("#")[0])
: window.location.hash = "";
}
Version complète avec instructions étape par étape
// Testez la laideur.
if (window.location.hash === "#_=_"){
// Vérifiez si le navigateur prend en charge history.replaceState.
if (history.replaceState) {
// Conservez l'URL exacte jusqu'au dièse.
var cleanHref = window.location.href.split("#")[0];
// Remplacez l'URL dans la barre d'adresse sans perturber le bouton retour.
history.replaceState(null, null, cleanHref);
} else {
// Eh bien, vous êtes sur un vieux navigateur, nous pouvons nous débarrasser du _=_ mais pas du #.
window.location.hash = "";
}
}
Étapes :
fragment
est #_=_
.window.replaceState
de HTML5.
#
et en prenant seulement la première partie.history
de remplacer l'état actuel de la page par l'URL propre. Cela modifie l'entrée d'historique actuelle au lieu d'en créer une nouvelle. Ce que cela signifie, c'est que les boutons de retour et de renvoi fonctionneront exactement comme vous le souhaitez. ;-)#_-_
.En savoir plus sur history.replaceState
.
En savoir plus sur window.location
.
A fonctionné parfaitement pour moi aussi. L'autre solution se débarrasse de tous les paramètres de requête.
Il fait la même chose pour google omniauth, donc j'obtiens une erreur "aucune route ne correspond", il ajoute un # (hashtag) après l'uri de la demande https://.....herokuapp.com/auth/google\_oauth2/callback?state=19feaacfe23423jh5jhhGSDFwb419049ebb18dabdf8&code=4/glrY3-mSlTzwerwERTEG334eXcn3hOSxGuc51BAlglPa4AU#
Si vous voulez supprimer le "#" restant de l'url
$(window).on('load', function(e){
if (window.location.hash == '#_=_') {
window.location.hash = ''; // pour les anciens navigateurs, laisse un # derrière
history.pushState('', document.title, window.location.pathname); // propre et net
e.preventDefault(); // pas de rechargement de page
}
})
Facebook utilise un cadre et à l'intérieur, tout fonctionne en utilisant la communication AJAX. Le plus grand problème dans ce cas est de préserver l'état actuel de la page. Autant que je comprends, Facebook a décidé d'utiliser des ancres simulées. Cela signifie que si vous avez cliqué quelque part, ils simulent cela comme une ancre à l'intérieur de votre page, et lorsque la communication AJAX commence, ils changent également la partie ancre de votre URL.
Cette solution vous aide normalement lorsque vous essayez de recharger la page (pas ENTRER, appuyez sur F5), car votre navigateur envoie l'URL complète avec des ancres au serveur Facebook. Par conséquent, Facebook prend l'état le plus récent (ce que vous voyez) et vous êtes alors en mesure de continuer à partir de là.
Lorsque le rappel renvoie #_=_
, cela signifie que la page était dans son état de base avant de la quitter. Comme cette ancre est analysée par le navigateur, vous n'avez pas à vous en soucier.
Si vous avez un framework javascript comme backbone ou ember, c'est un problème car tout ce qui se trouve après le dièse est interprété par le routeur.
Les identifiants de fragment URL ("ancres") ne sont pas envoyés au navigateur lors d'une requête. De plus, cette question concerne OAuth, pas le site principal du bureau. La raison en est la sécurité OAuth -- prévenir les attaques liées à la création d'une URI de redirection malveillante.
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.
0 votes
Je suis également confronté au même problème : stackoverflow.com/q/7190184/912011 Cependant, je pense que cela peut être lié à la version de Firefox.
0 votes
Est-ce que quelqu'un a trouvé une solution à ce problème? Le sdk standard de connexion à Facebook ne fonctionne pas.
0 votes
Le meilleur que nous puissions faire jusqu'à ce que Facebook corrige ce bug (ou leur documentation) est dans ma réponse ci-dessous. Tout d'abord, configurez vos URL de connexion conformément à leur documentation. Deuxièmement, ajoutez un petit hack javascript de header rapide pour éviter cela dans votre code. Cela se dégradera bien si Facebook corrige un jour cela.
0 votes
Bogue irritant de l'API FB. Il casse ma navigation AJAX :(
36 votes
Avez-vous une idée de comment Facebook ajoute ces caractères ? Facebook redirige vers mon gestionnaire où je gère ensuite la redirection vers l'URL de retour, mais les caractères sont toujours ajoutés à l'URL.
0 votes
developers.facebook.com/bugs/318390728250352 Ce lien pourrait vous faire rire
5 votes
@BenFoster Je pense que vous constaterez que si vous utilisez Fiddler ou un outil similaire, lorsque FB redirige vers votre gestionnaire, le
#_=_
est en place, puis même si vous effectuez une redirectionResponse.Redirect
vers l'endroit où vous voulez réellement aller, le navigateur conserve le hash, c'est pourquoi seules les solutions de contournement côté client suggérées ci-dessous fonctionneront.0 votes
Je n'ai pas encore trouvé de réponse à pourquoi cela est ajouté. Les publications Facebook incluses dans cette discussion ne sont pas utiles.
0 votes
Est-ce que quelqu'un sait pourquoi j'obtiens ceci et RIEN d'autre.
2 votes
2016 Mars, toujours en cours :P
2 votes
Avril 2016 se déroule toujours. -_-
1 votes
Mai 2016 se passe toujours :-)
2 votes
Pour information, cela ne sera pas corrigé
19 votes
2017, qu'est-ce que le zuck
6 votes
Mai 2017, toujours....
2 votes
Juin 2017 :) toujours en cours. #_=_
1 votes
Juillet 2017... yada yada yada
1 votes
Août 2017 même merde
1 votes
Novembre 2017, rien n'a changé ..
1 votes
Décembre 2017, TOUJOURS EN COURS
2 votes
Bienvenue en 2018! Oui.. ça se passe toujours.
1 votes
Février 2018, bug toujours en cours...
5 votes
Mars 2018..yep toujours en cours
2 votes
31 mai 2018.., #_=_ FTW!
0 votes
Le 27 juillet 2018. Ça continue de se produire!
2 votes
1 août 2018 se produit toujours! :(
0 votes
29 Septembre 2018... Grrr
0 votes
Octobre 2018 se passe toujours :(
1 votes
Jan 2019 toujours en cours
1 votes
Avril 2019 toujours en cours :)
1 votes
Août 2019, pas de nouvelles sur cette question x)
1 votes
Avril 2020 et je le vois toujours
0 votes
Noël 2020 se déroule toujours :(
0 votes
Février 2021 est toujours un problème pour moi
0 votes
Avril 2021, v10.0 toujours en cours