ぐだぐだと OAuth の使い方を解説するかもしれないその 2

その 1 は散々な出来だったのでそれがあれ。 Firefox のアドオン用にそれっぽいの書いてる人が当然のごとく見つからない感じなので、 私が書けばいいんじゃないかと思ったんだけど、なんて云うかうん。

まんずまんず、Addon クラスとか書こう。

class Addon
    consutructor: ->
        

で、3 分経ったのがこれ。

widgets = require 'widget'
tabs = require 'tabs'
self = require 'self'
data = self.data
panels = require 'panel'
network = require 'request'
SimpleStorage = require 'simple-storage'

OAuth = require './oauth'


class Addon
    constructor: ->
        @_config =
            consumerKey: 'YOUR CONSUMER KEY'
            consumerSecret: 'YOUR CONSUMER SECRET'

        @_consumer = new OAuth.Consumer @_config.consumerKey, @_config.consumerSecret
            site: 'http://api.twitter.com'

        @_widget = widgets.Widget
            id: 'oauth-login'
            label: 'Login'
            content: 'login'
            onClick: openAuthorizeTab
                

    openAuthorizeTab: =>
        @_consumer = new OAuth.Consumer @_config.consumerKey, @_config.consumerSecret
            site: 'https://api.twitter.com'

        @_request_token = @_consumer.getRequestToken()
        authorize_url = @_request_token.getAuthorizeURL()
        tabs.open authorize_url
        return

    run: ->

使い方はこう:

addon = new Addon
addon.run()

アドオンバーのボタンをクリックすると、おそらくついったーのログイン用ページが出てくると思う。

えーっと、run メソッドは… まだ run メソッドを書いてない。
問題は openAuthorizeTab メソッドだよね… とか書いてるうちに解決方法を思いついた。
ログインして、PIN が表示された時に何かを emit して on すればいいよね。

じゃなくて、OAuth の話

oauth.js を require する

oauth.js を require しないと始まらない。

OAuth = require './oauth'

oauth.js が、main.js 上にあるなら、こんな感じ。
次は Consumer オブジェクトを作成しよう。

Consumer オブジェクトを作成する

consumer = new OAuth.Consumer 'YOUR CONSUMER KEY', 'YOUR CONSUMER SECRET'
    site: 'https://api.twitter.com'

「こんしゅーま・きー」と「こんしゅーま・しーくれっと」、それに API をぶん投げる URL をハッシュとして渡す。

次に、RequestToken オブジェクトを取得する。

RequestToken オブジェクトを取得する

request_token = consumer.getRequestToken()

ログイン用の URL から自分のアカウントを認証するんだけど、これがちょっとめんどうで、Web ブラウザを起動して、 ユーザーにやってもらう必要がある。 ログインした後、最後に出てくる数字を request_token に教えるというアクロバティックな技を成功させ、 見事 AccessToken オブジェクトを取得してみせれば、後は半分終わったも同然だ。

PIN をどーにかして、取ってくる

Firefox の場合は知っての通り、それ自体が Web ブラウザなので、ログインし終わっているかもしれないし、 何かしら簡単にログインできることにはなっているはずなので、後は PIN をどのように request_token に伝えればいいか ということになる。

デモンストレーション(?) で書いたのはその方法がうにゃうにゃなんだけど、タブを閉じる時に、page-mod とかで、 PIN が書いてある要素から PIN を取ってくるとかなんとかだったりするのかもしれない。

とにかく、PIN を無事に取ってこれたら、RequestToken の getAccessToken メソッドを呼び出して、AccessToken オブジェクトを取得する。 このとき、こんしゅーま・きーと PIN をハッシュとして渡すことになる:

access_token = request_token.getAccessToken
    oauth_token: request_token.token
    oauth_verifier: PIN

それで、この AccessToken オブジェクトの token プロパティと secret プロパティをどこかに保存することになる。 そうしないと、またログインからやり直しになってしまうからだ。それはとってもめんどくさい。

え? どこかに保存した token プロパティと secret プロパティの値をどうやって AccessToken オブジェクトにするかって?
それは忘れた。
ということで、またね〜。