sinatraでoauth(authenticate)してみた

Rubyの勉強の一環として、軽量Webフレームワークsinatraで、oauth(authenticate)してみた。
sinatraを選んだ理由は、とにかくシンプルで軽い。ちょっとしたものしか作らないような自分にはマッチしたフレームワークなきがします。

まずは、sinatraのサイトにある通り
` [sourcecode language=”ruby”]

app.rb

require ‘sinatra’
get ‘/‘ do
‘Hello world!’
end
[/sourcecode]
gemをインストールして動かします。
[sourcecode language=”ruby”]
gem install sinatra
ruby -rubygems myapp.rb
[/sourcecode]
`

という具合に簡単です。

ルートハンドラやテンプレートにヘルパメソッドを定義できます。
` [sourcecode language=”ruby”]
helpers do
include Rack::Utils
use Rack::Csrf, :raise => true

def csrf_token
    Rack::Csrf.csrf_token(env)
end
`

end
[/sourcecode]

リクエストの実行前後に評価の行えるフィルタというものがあります。
フィルタ内でセットした変数はルーティング、テンプレートで使用できました。
[sourcecode language="ruby"] before do @twitter = TwitterOAuth::Client.new( :consumer_key => KEY, :consumer_secret => SECRET, :token => session[:access_token], :secret => session[:secret_token] ) end get '/' do if session[:login] @screen_name = @twitter.info['screen_name'] @image_url = @twitter.info['profile_image_url_https'] erb :login, :layout => false else erb :notlogin, :layout => false end end [/sourcecode]

で、早速oauthするサンプルを作ってみました。

そもそもrubyを正しく学んでないので、おかしなところあるかもしれないけど。
以下個人的なメモ。

  • SinatraのsessionはRackのCookieSessionを利用してるけど、暗号化があまりよろしくないっぽい。利用の際はRackのSessionをsecretキーを指定して使うべきではないだろうか。
    SinatraのSessionには注意
  • 開発時にオートリロードしてくれないので、変更加えるたびにWEBrickを再起動させるのが面倒。shotgunってのを入れてオートリロード化。

簡単なクライアントアプリケーションやJSのapiサーバーとして簡単に実装できていいですね。(モックレベルかな)

Comments