万年素人からHackerへの道

万年素人がHackerになれるまで殴り書きするぜ。

万年素人からGeekになるためのメモ

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!