/ / Por que o contexto de autorização com vários aplicativos PSGI no Catalyst não está funcionando? - perl, módulo perl, catalisador

Por que o contexto de autorização com vários aplicativos PSGI no Catalyst não está funcionando? - perl, módulo perl, catalisador

Eu tenho aplicações de middleware Plack em cascata de reboque (app1, app2) app1 é o aplicativo da frente. Eu segui estes tutoriais:

Este é o meu código:

use Plack::App::Cascade;
use Plack::App::URLMap;
use lib "/var/www/app1/lib",
"/var/www/app2/lib";
use app1;
use app2;

my $app1 = app1->psgi_app(@_);
my $app2 = app2->psgi_app(@_);

my $app_map1 = Plack::App::URLMap->new;
$app_map2->mount( "/" => $app1 );

my $app2 = Plack::App::URLMap->new;
$app2->mount( "/app2" => $app2 );

Plack::App::Cascade->new(apps => [ $app_map1, $app_map2 ])->to_app;

Até agora está tudo bem, adicionei também a funcionalidade de autenticação, e para isso usei estes dois módulos de catalisadores: Catalyst :: Plugin :: Autenticação e Catalyst :: Plugin :: Autorização :: Habilidades.

A parte de autenticação está funcionando bem para os dois aplicativos (usuário logado app1), mas eu tenho um problema para a parte de autorização apenas para app2. Quando tento descobrir, foi a variável de contexto $c. o app1 $c variável não era o mesmo que app2. Após a autenticação (de app1) Eu tenho um objeto de usuário $c->user, mas para o segundo aplicativo eu tive um novo $c criado e o $c->user Não foi encontrado.

Então, como esses dois aplicativos podem obter o mesmo contexto $c?

Respostas:

0 para resposta № 1

Eu acho a solução mas antes disso, deixe-me explicar a situação:

PSGI com aplicações middelware muti tem o mesmolimitação. Cada middleware se comporta como um aplicativo separado e cada um cria sua própria sessão. No caso, temos o recurso de autenticação (aplicado para todos os middelware) nós temos um prob aqui. como o exemplo acima, o app1 teve a sessão do usuário autenticado, mas app2 tinha apenas uma sessão anônima.

Então, para corrigir isso. Eu crio uma memória compartilhada para armazenar sessões. Para isso, eu preciso mudar Catalyst :: Plugin :: Session :: Loja :: Arquivo com Catalyst :: Plugin :: Session :: Store :: FastMmap para app1 e app2.

Em seguida, adicione esta configuração em app2.pm:

 "Plugin::Session" => {
cookie_name => "app1_session",
storage => "/tmp/app1/session_data",
}