ぐだぐだと 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 オブジェクトにするかって?
それは忘れた。
ということで、またね〜。