2020年11月12日木曜日

Sinatra をミドルウェアとして使ってみる

概要

Sinatra をミドルウェアとして使うと before の前に処理を実行することができるようになります

環境

  • macOS 10.15.7
  • Ruby 2.7.1p83
    • sinatra 2.1.0

サンプルコード

事前に /auth にアクセスしていないと /hello にアクセスすることができません
Middleware として使用している Sinatra のモジュラークラス内で定義している session は引き続きアプリケーションクラス側でも参照することができます

require 'sinatra/base'

class MyMiddleware < Sinatra::Base
  enable :sessions

  get '/auth' do
    session['user'] = 'admin'
  end
end

class MyApp < Sinatra::Base
  use MyMiddleware

  before do
    unless session['user'] == 'admin'
      redirect '/auth'
    end
  end

  get '/hello' do
    'ok'
  end
end

動作確認

curl で確認します
curl で cookies を使う場合は -c, -b オプションを使います

  • curl -c cookie.txt localhost:9292/auth

これでセッションを保存し -b を使って cookie を使用します

  • curl -b localhost:9292/hello

これで ok が返ってくることが確認できます
cookie.txt がない状態で /hello にアクセスするとリダイレクトされることが確認できると思います

最後に

基本的には session やデータベースと組み合わせて使うことになりそうです
処理的には認証などの共通処理や事前処理で使えそうです

0 件のコメント:

コメントを投稿