認証ミドルウェアがセッションキーを生成し、認証が成功するとセッション情報をCookieに保存する、認証およびセッションと呼ばれる独自のミドルウェアを作成しています。
上記の Cookie を使用して、Session ミドルウェアはセッション情報を抽出し、セッション管理を実装します。
しかし、どういうわけか、上記のミドルウェアをシリアル化できないため、セッション ミドルウェアの認証ミドルウェアによって作成された 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;
ミドルウェアと呼んでいる問題はありますか?