【メモ】 callbackで「#_=_」が付いて来てしまう件への対応

このスクリプトだと引数が落ちてしまうようです。それに対応したのがこちら
(続き) 【メモ】 callbackで「#_=_」が付いて来てしまう件への対応 | mutter

どういう理屈なのか解りませんが、OAuthで認証したあとのcallbackのURLの末尾に「#_=_」が付いて来てしまうことがあるようです。検索した限りではFacebookがそういう仕様のようで、Tumblrも同じような仕様です。多分、サービス側に何らかの理由があってこうなっているんだとは思うのですが、受け取る側からするとちょっと不都合があります。


例えば、

http://hoge.com/return

というURLをcallbackに指定してリクエストを投げた場合、こんな感じで返ってきます。

http://hoge.com/return?oauth_token=xxx&oauth_verifier=yyy#_=_

んで、何らかの処理をしてサイトのトップページにリダイレクトをしてやると(例はSymfony)、

$this->redirect('hoge/index')

URLはこうなってしまいます。

http://hoge.com/#_=_

本当はこうしたいのに。

http://hoge.com

もしかしたらフレームワーク側で対処出来るのかも知れませんし、ブラウザの設定なのかも知れませんが、検索して情報を収集してみた結果「JavaScriptでアドホックな対応」というのがポピュラーなようなので、とりあえずそれに従うことにしました。










対策

リダイレクト先のURL(この場合はサイトのトップページ)のJavaScriptに以下のコードを貼り付ける。


引用元

connect – Facebook Callback appends ‘#_=_’ to Return URL – Stack Overflow



これにより「#_=_」が付いている場合にそれが無いURLへ置き換えるということが行われます。そんな場当たり的対応で本当に良いのかと思いますが、URLのハッシュにサーバで対応するのは難しいようなので(それはブラウザが解釈すべき部分らしいです)、これで仕方ないのかなあとも。