Facebookアプリへユーザのemailや生年月日の情報の承認パラメータを追加する
デフォルトではemailや生年月日はFQLを使っても取れない。分かりやすいFacebook開発者へのサイト(in 日本語) によると・・・
「&scope=email,read_stream」でユーザに承認させないといけないようだ。
https://www.facebook.com/dialog/oauth?client_id=YOUR_APP_ID&redirect_uri=YOUR_URL&scope=email,read_stream
承認させるパラメータの名前は↓のサイトを参考にする。
http://developers.facebook.com/docs/authentication/permissions/
「FacebookOAuth」で実践
以前のブログでは「Do Ruby!さんのやり方 」を行ってた
Ruby(Rails)のFacebookOAuthモジュールでのパラメータの渡し方は「authorize_urlの設定 」が詳しい。
authorize_urlを今まで使っていたがおそらくそこから飛ぶようだ。
(1) [Hide source]を押してみよう。→ソースの中身が見える
(2) 何もしなかったときのデフォルト引数はこんな感じだね
authorize_url(options = {})
→つまり、ハッシュ型でパラメータを受け取るのだ。
{:hoge => 'foo', :bar => 'hogehoge'}
(3)↓ではデフォルトはscopeがoffline_accessになっている
・options[:scope]がnilだったら'offline_access,publish_stream'を入れて、options[:scope]が設定されてたらoptions[:scope]を使おうって意味。
options[:scope] ||= 'offline_access,publish_stream'
その処理のあとで、画像内の(3)のように :scope のkeyには、options[:scope]の value が入ってる。
:scope => options[:scope]
↓みたいに実際に認証画面でもそうなってる。なぜか、scopeでなくてperm(permissionかな?)だけど
Do Ruby!さんのところでは↓のように使ってたと思う
・app/controllers/application_controller.rb
redirect_to @client.authorize_url
これを↓みたいに修正してFACEBOOK_SCOPE定数を渡す。
・app/controllers/users_controller.rb
redirect_to @client.authorize_url(FACEBOOK_SCOPE)
FACEBOOK_SCOPEには↓のようにハッシュを設定
・app/controllers/application_controller.rb
FACEBOOK_SCOPE = {:scope => 'email, user_birthday, read_stream'}
こうするとOK!