2016年5月18日 星期三

[python] OAuth 取得 facebook 使用者的 id name email

1. 到 facebook developers頁面 建立一個 WWW APP ,可以得到一組 client id / client secret
下方填入自己的 WebService 網址。ex:


2.在系統的登入頁加入一個超連結,填入 上一步的 client id ,要向使用者索取的資源 scope, 以及使用者同意授權後,facebook 要將授權碼 redirect 的位址,我們填入自己的 WebService 位址。


href="https://www.facebook.com/dialog/oauth?
&client_id=1730077280596052
&scope=public_profile,email
&redirect_uri=http://bennu-aws.ddns.net:5000/fb_oauth"


3. 設計一個 WebService 接收 授權碼 code,使用 python Flask 框架。

@app.route("/fb_oauth", methods=["GET"])
def fbOauth():
    #接收授權碼
    strAuthCode = request.args.get("code", None, type=str)

4.將授權碼回傳給 facebook 換取 token,需要 client_id、client_secret、第3步得到的授權碼、以及第2步使用的 redircet_uri,facebook 就會回傳 token 回來

strAccessTokenUrlTemplate = "https://graph.facebook.com/oauth/access_token?
                                          &client_id=%s
                                          &redirect_uri=%s
                                          &client_secret=%s
                                          &code=%s"
strAccessTokenUrl = strAccessTokenUrlTemplate%
                                      (strFbClientId,
                                       "http://bennu-aws.ddns.net:5000/fb_oauth",
                                        strFbClientSecret,
                                        strAuthCode)
responseToken = urllib.request.urlopen(strAccessTokenUrl)
strToken =  responseToken.read().decode(responseToken.headers.get_content_charset())

5.使用 token 取得使用者的資料

responseUserData = urllib.request.urlopen("https://graph.facebook.com/me?
                                                                     &fields=id,name,email
                                                                     &" + strToken)
    strUserData = responseUserData.read().decode(responseToken.headers.get_content_charset())
    dicUserData = json.loads(strUserData)
    return (dicUserData["id"], dicUserData["name"], dicUserData["email"])

沒有留言: