Sinatra アプリの認証に Warden を使おうとしてたけど、「ユーザー名とパスワードを自前で保存したくない」と思い直して、OAuth や OpenID を検討し始めました。Twitter や Facebook や GitHub など、いろんな OAuth に対応したいから、使うライブラリは OmniAuth かな。
Sinatra + OmniAuth で、Twitter の OAuth を使って認証するサンプルを書いてみました。
# coding: utf-8 require "sinatra" require "omniauth" require "omniauth-twitter" # Twitter の OAuth を使うなら必須 # Sinatra のセッションを有効にする enable :sessions # OmniAuth の設定 use OmniAuth::Builder do # Twitter の OAuth を使う provider :twitter, "Consumer key", "Consumer secret" end get "/" do erb :index end # Twitter の認証が成功したら呼び出される get "/auth/:provider/callback" do # 認証情報は request.env に格納されている @auth = request.env["omniauth.auth"] erb :home end __END__ @@layout <!DOCTYPE html> <html> <head> <title>Sinatra-OmniAuth</title> </head> <body> <%= yield %> </body> </html> @@index <a href="/auth/twitter">Twitter でログイン</a> @@home <h1>Wellcome</h1> <pre> <%= @auth %> </pre>
たったこれだけのコードで実装できてしまった…。以前、Python + AppEngine + Kay Framework で Twitter の OAuth に挑戦したときは、結構コード書いたのにな。