Thursday, October 29, 2009

Facebook App開發手札 - Facebook JavaScript Client Library的驗證模式

範例網站

步驟一

首先請先確認你於Facebook是處於登出狀態, 接下來當你連結到範例網站之後, Facebook JavaScript Client Libraries中的FB.Facebook.apiClient.requireLogin方法會檢查目前的URL中是否有session這一個參數, 假如沒有的話, 你就會被強制的重導向到Facebook的登入頁, 並在URL後方附加上許多相關的GET變數, 包含你的API Key以及Callback URL等等資訊.

Login - Facebook_1256818047312

http://www.facebook.com/login.php?api_key={應用程式的API Key}&extern=0&fbconnect=1&next={應用程式的Callback URL}&return_session=1&v=1.0&locale=en_US

步驟二

如果return_session設定為1, 當登入成功之後, 頁面會重導向回Callback Page URL, 而瀏覽器路徑會顯示如下, 在Callback URL後會附上許多GET參數

http://www.6yeah.com/fb_apps/js_demo/?session={%22session_key%22%3A%223.drvv_pxbWgtdgo1dqmbL9g__.86400.1256907600-638368594%22%2C%22uid%22%3A%22638368594%22%2C%22expires%22%3A1256907600%2C%22secret%22%3A%22BnOyOpZJ8E9VWhhJUKUn9Q__%22%2C%22sig%22%3A%225a1856eac374f80cd115f41b8c5db5b8%22}

如果於登入頁中我們手動的將return_session設為0, 當登入成功之後, 頁面同樣的會重導向回Callback Page URL, 但是瀏覽器路徑列中多了一個auth_token的參數

http://www.6yeah.com/fb_apps/js_demo/?auth_token=99ee9fadf7d2dd3db9bebc3ad0474efb&session={%22session_key%22%3A%223.Ih1w4GGicah2W4ADW9Ah0g__.86400.1256907600-638368594%22%2C%22uid%22%3A638368594%2C%22expires%22%3A1256907600%2C%22secret%22%3A%2270uwUoq3CT7G2p1vTvrQGQ__%22%2C%22sig%22%3A%22af59a57df3d2f67b0d4107a6408ffdee%22}

此時依舊會執行到FB.Facebook.apiClient.requireLogin並發現URL(document.URL)中有一個session參數

步驟三

回傳的session資訊會被寫入Cookie之中, 也就是說就算把Callback URL後面的參數都刪除掉再重新連線一次(ex:http://www.6yeah.com/fb_apps/js_demo/)你依舊會被FB.Facebook.apiClient.requireLogin判定為已登入的狀態.

小結

  • 在Iframe App的模式下, 使用者身分驗證完成後進行重導向的URL是透過埋在前端頁面Javascript裡的API Key去Facebook的資料庫中去擷取出來的, 也就是說目前開發者並無法於前端指定重導向反回的URL. 然而在使用Facebook Connect的模式下, Callback URL會被設定成當前的頁面.
  • 一個session只適用於某特定的使用者與應用程式的配對而且只能被用來擷取,操作與更新符合該配對的使用者資料

 





 

No comments:

Post a Comment