2011-12-02 52 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,  ''); 
    } 
}());