# _ = _ добавлено в URL на Facebook - PullRequest
       21

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

13 голосов
/ 03 декабря 2011

После подключения к моему приложению 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

Ответы [ 2 ]

14 голосов
/ 08 декабря 2011

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

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

window.location.hash = ""

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

3 голосов
/ 12 марта 2014

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

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

Это решение удалит только строку fubar facebook # = из URL и оставит другие части хэша без изменений.

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

(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,     '');
    }
}()); 
...