2011-10-21 5 views
8

私は現在http://facebooksdk.codeplex.comを使ってfacebook connectのOAuth実装をテストしています。Facebookの認証と奇妙なリダイレクトの振る舞い

私はLogOnという2つの単純なアクションを持つFacebookControllerを持っています。コールバック

すべて正常に動作し、ユーザーは自分のシステムに正しくログオンしています。

問題はコールバックアクションが呼び出されたときである、奇妙な何かがそれは簡単な

return Redirect(loggedUrl); 

正しいログに記録されたURLにリダイレクトしますが、次の文字で終わるを作る起こる:#_=_

これは、と思われますFacebookサーバーは、次のHTTPヘッダーを使用してWebサーバーに情報を送信します。

HTTP/1.1 302 Found 
Cache-Control: private, no-cache, no-store, must-revalidate 
Expires: Sat, 01 Jan 2000 00:00:00 GMT 
Location: http://mywebsite.com/Facebook/CallBack/?state=1&code=AQCXexr10uxANSBOu9JqrBDxqPkWbsyxM1S9ltuY9XwCXW7eGsOII329SthClxOSM_a7wJvwrXh1_O3D5I7E_nxCDTWDLpyYdMpMUfw4zMWcQ4oV2PmRkIMd2NfPYRKlkLgkurEzka1CjAF1jp8Xb3crklOB59W4IT7LZy6MEmFusuhSKacmsTcV1LAOW4uJ3K4#_=_ 
P3P: CP="Facebook does not have a P3P policy. Learn why here: http://fb.me/p3p" 
Pragma: no-cache 
Set-Cookie: locale=en_US; expires=Fri, 28-Oct-2011 00:09:38 GMT; path=/; domain=.facebook.com 
Content-Type: text/html; charset=utf-8 
X-FB-Server: 10.43.103.61 
X-Cnection: close 
Date: Fri, 21 Oct 2011 00:09:38 GMT 
Content-Length: 0 

ご覧のとおり、 の末尾に#_=_の文字があります。の値です。

リダイレクトは、#_=_文字を自動的にloggedUrlに追加するようになっているようです。私はreturn Redirect("/");と試みる場合でも

#_=_が私のリダイレクトURLにどこにも(ほぼ)から追加された...

任意のアイデアは本当にいただければ幸いです。

お返事ありがとうございます。

よろしく、

LB

+1

これは、jQuery MobileのURLハッシュリスニングに関する問題を引き起こしました。 '$ .mobile.hashListeningEnabled = false;'それを解決しました。 –

答えて

2

Facebookは彼らの応答の最後に、この位に=文字を追加することで、最近自分の認証メカニズムを修正しました。文字列の最後の#記号は、実際に問題を作り出しています。だから、クエリを切り捨てて、うまくいくリダイレ​​クトを行うことができます。

+0

クエリを切り捨てるとはどういう意味ですか? – capdragon

+0

@capdragon:URLを取得し、最後に#=を削除し、任意の方法(ajax、リダイレクトなど)を使用してURLを再発行します。 –