概要
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 件のコメント:
コメントを投稿