我正在使用自己编写的身份验证和会话中间件,其中身份验证中间件生成会话密钥,并在成功进行身份验证后将会话信息保存在cookie中。
现在使用上面的cookie,Session中间件提取会话信息并实现会话管理。
但不知怎的,我无法序列化上述中间件,因此我可以在Session中间件中获取由身份验证中间件创建的cookie。
我尝试按以下方式构建它们 -
my $app = builder {
mount "/login" => builder {
enable "+X::Middleware::Authentication"; #This should be called first
enable "+X::Middleware::Session";
};
};
身份验证中间件简单地将用户验证到某个数据库,并在成功时生成会话密钥并将其保存在cookie中。
Session中间件看起来像 -
package X::Middleware::Session;
use Plack::Session::State;
use parent qw(Plack::Middleware);
use warnings;
use strict;
use Moose;
use Data::Dumper;
sub call {
my $self = shift;
my($env) = @_;
# Expecting the cookie information in $env, but its not there
my $request = Plack::Request->new($env);
my $session = $request->session;
$session->{user} = "some";
$env->{'psgix.session.options'}{change_id} = 1;
$env->{'psgix.session.options'}{expires} = 120;
my $response = Plack::Response->new();
print "Welcome to X::Middleware::Session Middleware\n\n\n";
print "X::Middleware::Session::ENV - " . Dumper($env) . "\n";
$response->status(200);
return $response->finalize;
}
1;
我打电话给中间件有什么问题吗?