如何将Plack身份验证与Session中间件一起使用?

时间:2015-04-08 09:48:23

标签: perl session cookies plack starman

我正在使用自己编写的身份验证和会话中间件,其中身份验证中间件生成会话密钥,并在成功进行身份验证后将会话信息保存在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;

我打电话给中间件有什么问题吗?

0 个答案:

没有答案