Saturday, May 29, 2010

Facebook API 使用小心得

Ruby on Rails中
我原本是使用 Facebooker 來使用 Facebook Connect & API
但老實說,Facebooker 並沒有將有點複雜的 Facebook API簡化多少,
我也一直沒有好好弄懂

而Facebook在四月底出了新的 Graph API
看了一下,感覺很平易近人,就此決定跳槽過去

新的 Graph API 已經很簡潔,其實可直接使用
但我還是挑了個 mini_fb 來幫忙  XD
另一個選擇是 Facebooker的作者為了新的Graph API,新寫的 mogli

用戶資料的授權使用,都是採用OAuth方式
也就要先拿到用戶的Access Token

Access Token可以用Graph API來取得 (MiniFB.oauth_access_token)

也可以 JavaScript SDK 中的FB.login來取得

JS_1. 像以前的Facebook Connect (現在改名Login with Facebook):

<fb:login-button perms="email"></fb:login-button>

上面是產生 Login with Facebook 的按鈕, 
perms代表除了基本授權外,另外再向用戶要求email資料

並用JS設定登入後的動作

FB.Event.subscribe('auth.login', function(response) {
    if (response.perms) {
      // 用戶登入成功,並額外授權perms
    } else {
      // 用戶登入成功,不額外授權
    }
  } else {
    // 登入失敗
  }
});

JS_2. 自行建立link或button,  and bind click event
 
FB.login(function(response){
    if (response.perms) {
      // 用戶登入成功,並額外授權perms
    } else {
      // 用戶登入成功,不額外授權
    }
  } else {
    // 登入失敗
  }
},{perms:'email'});

登作成功後,Facebook會在用戶端建立一個 "fbs_你的APP_ID" 的Cookie
可先認證是否真實有效 (MiniFB.verify_cookie_signature)
 

Cookie中含有 uid-> 用戶的FB ID 及 access token
有了access token,就可以取得用戶資料囉
如果你請求  offline_access 授權,就可把這個token存入資料庫中,日後好使用
額外請求的用戶email,則可用FQL叫出來

 
從Facebooker轉往mini_fb
可延用fb_user_id, email_hash應該不需要了

login_from_fb 可改為

if facebook_cookie.present?
   User.find_by_fb_user_id( facebook_cookie["uid"] ) 
end   

logout最簡單的方法 :onclick=>"FB.logout();",並清掉cookie及sessions

   

No comments:

Post a Comment