facebookのpython-sdkでoAuthしてみる
|FaceBookのSDKからpythonが無くなっていますが、githubには残っていたのでリンク張っておきます。
さて、本屋で立ち読みしたFaceBookアプリの本や、検索すると出てくるpython(検索の場合はほぼGAE/p)のサンプルにはoAuthが入っていません。
良くあるサンプルだと、記述されているFBMLでログイン済みか確認してリダイレクトやら何やらブラックボックスで処理していたので、oAuthも上手い事やってるのかなーと思っていましたが、実際にアプリを作ると初めてアプリを利用する人には不細工なFB:Loginでログインボタンが出て来たり、ログインしてもcookieが取れないのかループしたり、GAE上だと環境依存がありそうだと思っていたのですが、単純にoAuthの機能が無いだけでした。
つまり、FBMLのログイン認証(を使っているサンプル)はFaceBookのiFrameアプリでは使えないと言う事になります。
本を読んでも応用する為には色々試さないと駄目な例ですね。
1) まず、トークンを取得する為の鍵を要求します。
client_id=アプリID、redirect_uri=認証処理を行うURLをパラメーターにして下のURLにリダイレクトします。※scope=xxでパーミッションを任意指定
https://graph.facebook.com/oauth/authorize2) 次に、code=xxxのように鍵が発行されるので、発行された鍵をつかってトークンを要求します。
client_secret=シークレット、code=発行された鍵をパラメーターにして下のURLへアクセスします。※リダイレクトではなく、GETプロトコルでアクセス
https://graph.facebook.com/oauth/access_token
client_id=アプリID、redirect_uri=認証処理を行うURLをパラメーターにして下のURLにリダイレクトします。※scope=xxでパーミッションを任意指定
https://graph.facebook.com/oauth/authorize2) 次に、code=xxxのように鍵が発行されるので、発行された鍵をつかってトークンを要求します。
client_secret=シークレット、code=発行された鍵をパラメーターにして下のURLへアクセスします。※リダイレクトではなく、GETプロトコルでアクセス
https://graph.facebook.com/oauth/access_token
3)アクセストークンが発行されるので、FaceBook APIから情報を取得
APIからアクセスユーザーの情報を取得して、必要なもの(id、name、linkなど)を保存します。
https://graph.facebook.com/me?access_token=xxx
親切なサンプルもリンクしておきます。
ちなみに、iFrameアプリの場合は親windowのリダイレクトを行わないとパーミッションの要求画面の前に変なロゴを手動でクリックさせられます。
ユーザービリティを考慮した場合はリダイレクト処理をjavascriptで行うなどのテクニック?が必要になるので参考にして下さい。