Обратный звонок Facebook добавляет '# _ = _' к URL возврата - PullRequest
455 голосов
/ 20 августа 2011

Обратный вызов Facebook начал добавлять хэш-символ #_=_ к обратному URL

Кто-нибудь знает почему?Какое решение?

Ответы [ 21 ]

4 голосов
/ 16 мая 2012

Добавление этого на мою страницу перенаправления исправило проблему для меня ...

if (window.location.href.indexOf('#_=_') > 0) {
    window.location = window.location.href.replace(/#.*/, '');
}
3 голосов
/ 14 ноября 2014

С помощью углового и углового UI-маршрутизатора вы можете исправить это

    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:
          /5442741/obratnyi-zvonok-facebook-dobavlyaet-k-url-vozvrataanswer-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 ...
    });
});
2 голосов
/ 12 ноября 2018

Если вы используете vue-router, вы можете добавить в список маршрутов:

{
  path: '/_=_',
  redirect: '/', // <-- or other default route
},
2 голосов
/ 13 декабря 2015

Для меня я делаю перенаправление JavaScript на другую страницу, чтобы избавиться от #_=_. Идеи ниже должны работать. :)

function redirect($url){
    echo "<script>window.location.href='{$url}?{$_SERVER["QUERY_STRING"]}'</script>";        
}
2 голосов
/ 04 сентября 2011

Недавно было введено изменение в том, как Facebook обрабатывает перенаправления сеансов. См. «Изменение в поведении перенаправления сеанса» в сообщении Operation Developer Love в блоге на этой неделе.

1 голос
/ 20 ноября 2017

Я использую этот, чтобы удалить символ '#'.

<script type="text/javascript">
    if (window.location.hash && window.location.hash == '#_=_') {
        window.location.href = window.location.href.split('#_=_')[0];
    }
</script>
1 голос
/ 02 сентября 2017

Я знаю, что этот ответ задерживается, но если вы используете passportjs, вы можете захотеть увидеть это.

return (req, res, next) => {
    console.log(req.originalUrl);
    next();
};

Я написал это промежуточное программное обеспечение и применил его к экземпляру сервера Express, а полученный исходный URL-адрес без "#_=_".Похоже, когда мы применяем экземпляр passporJS в качестве промежуточного программного обеспечения к экземпляру сервера, он не принимает эти символы, а виден только в адресной строке наших браузеров.

1 голос
/ 21 октября 2015

Обходной путь, который работал для меня (с помощью Backbone.js), заключался в добавлении «# /» в конец URL-адреса перенаправления, переданного в Facebook. Facebook сохранит предоставленный фрагмент и не добавит свой собственный "_ = _".

По возвращении Backbone удалит часть "# /". Для AngularJS добавление "#!" на обратный URL должен работать.

Обратите внимание, что идентификатор фрагмента исходного URL-адреса сохраняется при перенаправлении (через коды состояния HTTP 300, 301, 302 и 303) большинством браузеров, если URL-адрес перенаправления также не имеет идентификатора фрагмента. Это кажется рекомендуемым поведением .

Если вы используете скрипт-обработчик, который перенаправляет пользователя в другое место, вы можете добавить «#» к URL-адресу перенаправления, чтобы заменить идентификатор фрагмента пустой строкой.

0 голосов
/ 04 октября 2018

Это удалит добавленные символы в ваш URL

<script type="text/javascript">
 var idx=window.location.toString().indexOf("#_=_"); 
   if (idx > 0) { 
     window.location = window.location.toString().substring(0, idx); 
   } 
</script>
0 голосов
/ 06 июля 2018

Для пользователей PHP SDK

Я исправил проблему, просто удалив лишнюю часть перед пересылкой.

 $loginURL = $helper->getLoginUrl($redirectURL, $fbPermissions);
 $loginURL = str_replace("#_=_", "", $loginURL);
 header("Location: " . $loginURL);
...