/ / Prečo kontext autorizácie s viacerými aplikáciami PSGI v Catalyst nefunguje? perl, perl-modul, katalyzátor

Prečo kontext autorizácie s viacerými aplikáciami PSGI v nástroji Catalyst nefunguje? perl, perl-modul, katalyzátor

Mám kaskádové kaskádové aplikácie middleware aplikácie Plack (app1, app2) app1 je predná aplikácia. Nasledoval som tieto návody:

Toto je môj kód:

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;

Až doteraz bolo všetko v poriadku, pridala som aj autentifikačnú funkciu a za to som použil tieto dva katalyzátorové moduly: Katalyzátor :: Plugin :: Authentication a Katalyzátor :: Plugin :: autorizáciu :: Schopnosti.

Časť autentifikácie funguje správne pre dve aplikácie (používateľ prihlásený z app1), ale mám problém pre autorizáciu len pre app2, Keď sa snažím zistiť, bola to kontextová premenná $c, app1 $c premenná nebola rovnaká ako app2, Po overení (od app1) Mám objekt používateľa $c->user, ale pre druhú žiadosť som mal nový $c vytvorené a $c->user sa nenašla.

Takže ako môžu tieto dve aplikácie získať rovnaký kontext $c?

odpovede:

0 pre odpoveď č. 1

Nájdem riešenie, ale predtým mi dovoľte vysvetliť situáciu:

PSGI s aplikáciami muti middelware majú rovnakéobmedzenia. Každý middleware sa správa ako samostatná aplikácia a každý vytvorí vlastnú reláciu. V prípade, že máme funkciu autentifikácie (pre všetky middelware), máme tu problém. ako príklad uvedený vyššie, app1 mal reláciu overeného používateľa, ale app2 mal len anonymné stretnutie.

Takže, aby to bolo možné. Vytváram zdieľanú pamäť na uloženie relácií. Preto sa musím zmeniť Katalyzátor :: Plugin :: Session :: obchod :: File s Katalyzátor :: Plugin :: Session :: obchod :: FastMmap pre app1 a app2.

Potom pridajte túto konfiguráciu app2.pm:

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