RestGraphを使ってFacebookアプリを書いていて、ドキュメントを参考にしつつ

rest_graph_setup(:app_id => API_ID,
:secret => API_SECRET,
:canvas => CANVAS_NAME,
:auto_authorize => true,
:auto_authorize_scope => 'publish_stream',
:auto_authorize_options => {},
:ensure_authorized => true,
:write_session => true,
:write_cookies => true,
:write_handler => nil,
:check_handler => nil,
:auto_decode => true,
)

とか初期設定しているんだけど、これだとスマートフォン版Facebook(アプリ、ブラウザ共に)で開くと延々とリダイレクトループになってOAUTHが通らない。

ログによると、APIのレスポンスは

{
"error": {
"type": "OAuthException",
"message": "Error validating verification code."
}
}

と出ていて、ぶっちゃけなんだかよく分からない。検索すると「リダイレクトURLに変な文字が入ってると出るよ!」とか出てくるんだが、入ってないし。
ちなみにアプリ側では/にアクセスするとFBにログインしているかどうかを見て、ログインしていればiFrame canvasにリダイレクト、逆にFBにログインせずにcanvasを見に行くと/にリダイレクトされるようになっている。どうやらここでaccess_tokenからFacebook IDが取得できないのでリダイレクトループになってるというのは分かった。
そこで、いったんどうなるか試そうとensure_authorized(access_tokenがない時にFBに要求しに行く)をfalseにしてみたところ、リダイレクトループは止まり、「Facebookでログイン」ボタンを押すと正常にログインできるようになった。
と言うか、ensure_authorizedをfalseにしたままでもブラウザでの挙動は変わらないし、/からのリダイレクトも問題ない。ensure_authorizedってどんな時に使うんだろう?

rubyのコードは載ってないですがとっかかりとしては分かりやすいかと。
索引があまり当てにならないのは残念。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>