perl – 你如何使用Twiggy服务器使用Plack :: Middleware :: Session?

前端之家收集整理的这篇文章主要介绍了perl – 你如何使用Twiggy服务器使用Plack :: Middleware :: Session?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个基于 Twiggy的perl服务器:

my $app = sub { my $req = Plack::Request->new(shift); ... };
my $twiggy = Twiggy::Server->new(port => $port);
$twiggy->register_service($app);

它工作正常,但现在我想添加会话管理(处理用户身份验证).我看到CPAN上有一个Plack::Middleware::Session模块,但基于它的文档和Twiggy我不知道如何将两者结合使用.我有理由相信这可能是因为在我的$app我正在处理Plack的东西.

或者使用Plack :: Middleware :: Session,还有其他方法可以轻松获取和设置cookie值并维护会话状态以进行身份​​验证吗? (用户请求的每个页面加载都在服务器的新分支中处理.)

解决方法

你可以将它串在一起. Plack :: Builder的构建器功能将您的应用程序包装在中间件(或几个)中.然后你将它作为一个新的应用程序传递给Twiggy.

use Plack::Builder;
use Twiggy::Server;

my $app = sub {
    my $env = shift;
    my $req = Plack::Request->new($env);
    my $session = $env->{'psgix.session'};
    return [
        200,[ 'Content-Type' => 'text/plain' ],[ "Hello,you've been here for ",$session->{counter}++,"th time!" ],];
};

$app = builder {
    enable 'Session',store => 'File';
    $app;
};

my $twiggy = Twiggy::Server->new(port => 3000);
$twiggy->register_service($app);

AE::cv->recv;

请注意,构建器将返回一个新的应用程序,但除非您指定它,否则它不会以$app结尾.您也可以将构建器放入register_service,如下所示:

my $twiggy = Twiggy::Server->new(port => 3000);
$twiggy->register_service(builder {
    enable 'Session',store => 'File';
    $app;
});

或者你当然可以摆脱Twiggy :: Server并使用twiggy运行twiggy命令行工具或plackup.

猜你在找的Perl相关文章