2011-12-02 48 views
12

通过Facebook连接到我的Rails应用程序后,我的#_ = _添加到我的URL。#_ = _通过Facebook添加到URL

我试着指定一个由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 

回答

14

#_=_片段通过被实有意添加Change in Sessions Redirect Behavior下所描述的。据称在你的请求中明确设置了redirect_uri来处理这个问题,但是显然有一个即使在指定了redirect_uri时仍然存在不需要的片段的错误。

假设这个bug没有解决,解决方法可能是更换使用Javascript哈希位置:

window.location.hash = "" 

这并不能取代实际的哈希字符,但它后面将摆脱一切。

+0

谢谢zeantsoi。我一直在等待这个,但修复,但现在我看到随机效应。我得到#_ = _在铬,但没有safari,虽然在我得到它在safari之前。我现在正与js的解决方法。 – tomek

+0

@tomek - 当Facebook解决这个错误时,似乎最好的解决方案将会出现,这显然是他们的待办事项。如果现在解释和JS解决方法已经足够了,您是否介意投票或接受答案? – zeantsoi

+1

这会删除'#'后面的所有字符,但用户会看到页面的最底部。任何解决方法? – paniwani

3

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

您可能会在您的网址中留下#个合适的锚点,如果您最终可能在Facebook登录后被转发到网站上的任何页面,则情况尤其如此。因此删除#中的所有内容可能会导致问题

该解决方案将只从URL删除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,  ''); 
    } 
}());