我有一个基于
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.