2011-12-02 10 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が指定されていても不要なフラグメントが残っているようです。このバグを想定し

が解決されない、この問題を回避するには、Javascriptを使用してハッシュ場所を交換することがあります

window.location.hash = "" 

これは、実際のハッシュ文字を置き換えるものではありませんが、それを次のようにすべてを取り除くでしょう。

+0

ありがとうzeantsoi。私はこれを待っていましたが修正しましたが、今はランダムな効果があります。私はクロムで#_ = _を得るが、サファリではない。私は今のところjsの回避策に行くつもりです。 – tomek

+0

@tomek - Facebookがバグを解決したときに最善の修正が来るように思われます。説明とJSの回避策が今のところ十分であれば、投票したり答えを受け入れるのがいいですか? – zeantsoi

+1

これは '#'の後にあるすべての文字を削除しましたが、そのページの最下部がユーザに表示されます。回避策はありますか? – paniwani

3

おそらく、これはより洗練された答えと私がこの問題を解決するために使用したものです。

あなたのURLに#アンカーがあることが望ましい場合があります。これは、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,  ''); 
    } 
}()); 
関連する問題