Facebook是用OAuth 2.0 protocol去做認證,必須要申請應用程式,取得Application ID, API Key, Application Secret才能完成認證。
認證的過程簡單來說只有兩步。
1.取得使用者認證:送出App ID與導向位置,使用者會在這步選擇是否信任此應用程式,確認後會將網頁導至你所指定的位置,並帶上code這參數。
2.取得Access Token:送出App ID、Redirect Url、App Secret、Code,取回access_token。
之後就可以使用access_token呼叫facebook的一些功能了。
Step 1 : Redirect the user to authorization process
在這步驟要確認使用者是否信任此應用程式,方法是將網頁導向
https://graph.facebook.com/oauth/authorize
帶上兩個參數
client_id : 應用程式的App ID。
redirect_uri : 認證後要導回的Url。
範例
https://graph.facebook.com/oauth/authorize?client_id=1234567890&redirect_uri=http://www.died.tw/oauth_redirect
若使用者尚未信任該應用程式,則會出現下面這個確認視窗。
使用者同意後就會將頁面導向剛剛所指定的Url,並帶上參數code,這會在下一步的認證中用到。
Step 2 : Exchange for an OAuth access token
在這步驟要將剛剛取得的code丟回facebook換access_token,方法是向下面這網址送出request
https://graph.facebook.com/oauth/access_token
帶上四個參數
client_id : 應用程式的App ID。
redirect_uri : 認證後要導回的Url,需與第一步的Url相同。
client_secret : 應用程式的Application Secret。
code : 第一步中取得的code。
成功的話,會獲得像是下面的結果
access_token=15343104470093|2.m_nKLR3hlR1HBMcTSEI5zg__.3600.1290067200-1435870392|Kc5jFUOkQr7r8aSs6Vm6K52wmio&expires=5124
之後就可以拿這個access_token呼叫facebook的功能了,詳細的呼叫方法下回分曉。
參考資料 : Facebook Documentation Authentication
您好~請教一下
ReplyDelete如果是用網頁傳參數的方式做驗證,FB好像不會寫 Cookie值(access_token)
如果是用JS SDK則會寫Cookie值(access_token)
所以如果用JS的方式,就有辦法一開始就取得使用者是否已經登入的狀態
但是如果用網頁傳參數的方式做驗證,有辦法一開始就判斷使用者是否登入嗎?
一開始就判斷有無登入似乎不行,所以要自己作手腳,我想到兩個
ReplyDelete1)每次都認證一次,笨方法
2)取得access_token後,將access_token與使用者id存進cookie,照expires去設cookie過期時間,之後就先檢查cookie就好。簡單來說就是自己寫cookie
帥喔~這兩個方法我有想過
ReplyDelete我比較想用第二種方式
我有去看JS寫的cookie
主要要填寫以下這些值
1)access_token(現有-可寫入)
2)base_domain(現有-可寫入)
3)expires(可自訂-FB好像說如果不填,Cookie會永久有效)
4)secret(可寫入,但要加密過)
5)session_key(現在用 OAoth2,我猜應該用不到,如果不寫或是亂寫不曉得會不會有關係)
6)sig(不曉得是什麼值,好像也是加密過)
7)uid(現有-可寫入)
我來試試看,再來分享實驗結果
其實只要寫1,3,7就好,然後判斷如果access_token失效(也許使用者砍了app重加)就重跑oauth認證,應該就可以了。
ReplyDelete你好,想請問一個問題
ReplyDelete請問redirect_uri,如果不是當初在app所設定的uri的話,要怎麼設定呢?
因為我用了這個網址,但是他都說這個uri不被這個app所擁有
就會出現錯誤
謝謝^^
facebook為了避免有人亂用別人的app,所以會限制uri只能在你app setting設的網域內,去app setting裡面改一下就好了。
ReplyDelete你好~不好意思再請問另一個問題,
ReplyDelete我改成我的網域內,但是他倒向那個網頁後,卻沒有出現任何東西
想請問知道為什麼嗎?
謝謝^^
他導給你的網址上會有傳querystring,你要接值去用啊XD
ReplyDelete