2

我有自己的书面中间件,称为身份验证和会话,其中身份验证中间件生成会话密钥并在成功身份验证后将会话信息保存在 cookie 中。

现在使用上面的 cookie 会话中间件提取会话信息并实现会话管理。

但不知何故,我无法序列化上述中间件,这样我就可以在 Session 中间件中获取 Authentication 中间件创建的 cookie。

我试图构建它们如下 -

my $app = builder {
    mount "/login" => builder {
       enable "+X::Middleware::Authentication"; #This should be called first
       enable "+X::Middleware::Session";
    };
};

身份验证中间件简单地将用户验证到某个数据库,并在成功时生成会话密钥并将其保存在 cookie 中。

会话中间件看起来像 -

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;

我调用中间件有什么问题吗?

4

0 回答 0