perl - 如何堆叠Plack身份验证处理程序?

标签 perl session authentication plack

我想让我的 Plack 应用程序尝试几种不同的方式来授权用户。具体来说,检查用户是否已通过 session cookie 获得授权,然后检查 Digest 身份验证,然后回退到 Basic。

我想我可以按照我希望检查它们的顺序( session 、摘要、基本)启用一堆 Auth 处理程序。不幸的是,Plack::Middleware::Auth::Digest的方式和 Plack::Middleware::Auth::Basic如果摘要或基本身份验证不存在,则它们都分别返回 401。

这在 Plack 中通常如何处理?

最佳答案

我没有实现,但我认为我有方法。您可以使用 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;
};

关于perl - 如何堆叠Plack身份验证处理程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4654151/

相关文章:

javascript - sessionStorage 和粘性 session

authentication - 请求的路径在索引 0 处包含未定义的段

java - 调用 MultipleAccountPublicClientApplication() 时,MSAL 引发 MsalClientException

java - 如何将 OpenID 集成到 GlassFish 中?

php - @_ -1 在 Perl 中是什么意思?

perl - Perl 中的多级 'do'?

perl - 有PDL的信号处理模块吗?

windows - 学习 Perl,但如何在 Windows 上获得 5.14?

php - 在 PHP 和 MYSQL 中设置用户权限

php - CodeIgniter session ID 更改且不工作