Hachioji.pm 日めくりテックトーク

PlackのMiddlewareを条件付きでロードする

papixです. ここまでこの「Hachioji.pm 日めくりテックトーク」を, まったくテックに関係ない話題で埋め尽くしてきました(cf. 旅行情報, 飯情報...)が, 今日は久々にテックな話題をお送りします.

PlackのMiddlewareを, 「ある条件を満たした場合のみ適用したい」という場合があると思います.
例えば, Basic認証をかけるPlack::Middleware::Auth::Basicを, 一部のパスの場合のみ有効にして, Basic認証をかけたい! ...という場合とかです.

Plack::Middleware::Auth::Basicをenableで有効にした場合, 全てのパスに対してBasic認証をかけてしまいます.
このような場合, enableはなくenable_ifを使うことで実現することができます.

例えば, パスの先頭が/loginである場合のみ, Basic認証をかけたいという場合は,

enable_if { $_[0]->{PATH_INFO} =~ m!^/login! }
    'Plack::Middleware::Auth::Basic',
    authenticator => sub {
        my ($username, $password, $env) = @_;
        return 'hoge' eq $username && 'fuga' eq $password;
    };

のように書けばOKです.
詳しくはこちらの記事をどうぞ: Plack::Middlewareの使い所

created by
papix
created at
last modified at
2013-12-22 19:32
comments powered by Disqus