首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何堆叠Plack身份验证处理程序?

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

Stack Overflow用户
提问于 2011-01-11 12:23:14
回答 2查看 771关注 0票数 5

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

我想我可以按照我想要检查的顺序启用一堆Auth处理程序(Session,Digest,Basic)。不幸的是,如果摘要或基本身份验证不存在,那么Plack::Middleware::Auth::DigestPlack::Middleware::Auth::Basic的编写方式都会返回401。

在Plack中这通常是如何处理的?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-01-17 11:53:07

我没有实现,但我想我有办法。您可以使用Plack::Middleware::Conditional“内联”完成此操作。因此,它看起来像这样,但您必须填充缺少的条件/测试。我没有看到一种简单/显而易见的方法,但我怀疑你可能会。由于您有要传递的$env,因此您应该能够按所需的顺序设置/检查HTTP_/session内容,并保留状态以供下一个处理程序知道是否应该启用它。

代码语言:javascript
复制
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;
};
票数 4
EN

Stack Overflow用户

发布于 2011-01-11 12:47:24

我认为您将需要编写自己的中间件,因为理想情况下(基于对RFC 2617的快速读取),当未通过身份验证时,您将返回一个带有基本和摘要挑战的WWW-Authenticate报头(对于只了解基本的用户代理,使用Basic first )。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4654151

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档