#_ = _由facebook添加到网址

时间:2011-12-02 21:08:07

标签: ruby-on-rails-3 facebook-graph-api omniauth

通过Facebook连接到我的Rails应用程序后,我已将#_ = _添加到我的网址上。

我尝试指定FB指定的redirect_uri但它不起作用 删除符号的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 个答案:

答案 0 :(得分:14)

根据Change in Sessions Redirect Behavior所述,Facebook有意添加#_=_片段。据称在您的请求中明确设置redirect_uri可以解决这个问题,但是即使指定了redirect_uri,也会出现一个持续存在不需要的碎片的错误。

假设此错误未得到解决,解决方法可能是使用Javascript替换哈希位置:

window.location.hash = ""

这不会取代实际的哈希字符,但会删除它后面的所有内容。

答案 1 :(得分:3)

也许这是一个更清晰的答案,也是我用来解决这个问题的答案。

您的网址中可能包含#anchor,如果您最终可以在Facebook登录后转发到网站上的任何网页,则尤其如此。因此,删除#中的所有内容可能会导致问题。

此解决方案只会从网址中删除fubar facebook# = 字符串,并保留散列的其他部分。

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