Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Perl 如何在会话中间件中使用Plack身份验证?_Perl_Session_Cookies_Plack_Starman - Fatal编程技术网

Perl 如何在会话中间件中使用Plack身份验证?

Perl 如何在会话中间件中使用Plack身份验证?,perl,session,cookies,plack,starman,Perl,Session,Cookies,Plack,Starman,我有自己编写的中间件,称为身份验证和会话,其中身份验证中间件生成会话密钥,并在成功身份验证后将会话信息保存在cookie中 现在,会话中间件使用上述cookie提取会话信息并实现会话管理 但不知何故,我无法序列化上述中间件,以便在会话中间件中获取由身份验证中间件创建的cookie 我试着如下所示构建它们- my $app = builder { mount "/login" => builder { enable "+X::Middleware::Authentica

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

现在,会话中间件使用上述cookie提取会话信息并实现会话管理

但不知何故,我无法序列化上述中间件,以便在会话中间件中获取由身份验证中间件创建的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;

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

我已经得到了这个问题的答案,因为我想通过身份验证中间件返回%env散列,然后该中间件将修改/访问此散列以及对应用程序的响应。