# _ = _ добавлен в URL по facebook

После подключения к моему Rails-приложению через Facebook я добавил # _ = _ к моему URL-адресу.

Я попытался указать redirect_uri, как указано FB, но это не сработало.
Обходное решение Javascript для удаления символов не помогает. Я пробовал все безрезультатно. Любые указатели на то, как это решить?

Моя настройка:

gem 'rails', '3.0.11'
gem "devise", '1.5.2'
gem "omniauth", '1.0.1'
gem 'omniauth-facebook', '1.0.0rc2'

module Facebook
 CONFIG = YAML.load_file(Rails.root.join("config/facebook.yml"))[Rails.env]
 FB_APP_ID = CONFIG['app_id']
 FB_APP_SECRET = CONFIG['secret_key']
end

Rails.application.config.middleware.use OmniAuth::Builder do    
 provider :facebook, Facebook::FB_APP_ID, Facebook::FB_APP_SECRET,
 :scope => 'offline_access, email, publish_stream',
 :display => 'touch'
end

Ответы

Ответ 1

Фрагмент #_=_ намеренно добавляется Facebook, как описано в Изменение в действиях по перенаправлению сеансов. Очевидно, что установка redirect_uri в вашем запросе якобы позаботится об этой проблеме, но, по-видимому, ошибка, которая сохраняется в нежелательном фрагменте, даже когда указан параметр redirect_uri.

Предполагая, что эта ошибка не устранена, обходным решением может быть замена хеш-местоположения с помощью Javascript:

window.location.hash = ""

Это не заменяет фактический символ хэша, но будет избавляться от всего, что следует за ним.

Ответ 2

Возможно, это более чистый ответ и тот, который я использовал для решения этой проблемы.

У вас могут быть # привязки в ваших URL-адресах, которые желательны, и это особенно актуально, если вы можете быть перенаправлены на любую страницу на сайте после входа в facebook. Поэтому удаление всего в # может вызвать проблемы.

Это решение будет удалять только фубарную фреймворк # = строку из URL-адреса и оставить остальные части хэша целыми.

Добавьте этот JS в свой заголовок или глобальный JS include.

(function() {
    "use strict";
    if (window.location && window.location.hash) {
        if (window.location.hash === '#_=_') {
            window.location.hash = '';
            return;
        }
        var facebookFubarLoginHash = RegExp('_\=_', 'g');
        window.location.hash = window.location.hash.replace(facebookFubarLoginHash,     '');
    }
}());