Sch*_*ern 5 authentication perl session plack
我想让我的Plack应用程序尝试几种不同的授权用户的方法.具体来说,检查用户是否已通过会话cookie授权,然后检查摘要式身份验证,然后回退到Basic.
我想我可以按照我希望它们被检查的顺序启用一堆Auth处理程序(Session,Digest,Basic).不幸的是,Plack :: Middleware :: Auth :: Digest和Plack :: Middleware :: Auth :: Basic的编写方式如果摘要或基本auth分别不存在则返回401.
这通常如何处理普拉克?
我没有实施,但我想我有方法。您可以使用Plack::Middleware::Conditional “内联”执行此操作。所以它看起来像这样,但您必须填写缺少的条件/测试。我没有看到简单/明显的方法,但我怀疑你可能会。由于您可以$env传递,因此您应该能够按照您想要的顺序设置/检查 HTTP_/session 内容,并保留下一个处理程序的状态以了解是否应该启用它。
use Plack::Builder;
my $app = sub {
[ 200,
[ "Content-Type" => "text/plain" ],
[ "O HAI, PLAK!" ]
];
};
builder {
enable "Session::Cookie";
enable_if { my $env = shift;
# I don't know...
} "Auth::Digest",
realm => "Secured", secret => "BlahBlah",
authenticator => sub { $_[0] eq $_[1] };
enable_if { my $env = shift;
# I don't know...
} "Auth::Basic",
authenticator => sub { $_[0] eq $_[1] };
$app;
};
Run Code Online (Sandbox Code Playgroud)