通过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
答案 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, '');
}
}());