milantru / ServIS

A web information system for companies working with excavators.
1 stars 0 forks source link

Problém s RevalidatingServerAuthenticationStateProvider #4

Open milantru opened 1 year ago

milantru commented 1 year ago

Ak sa užívateľ prihlási, otvorí nový tab a v novom tabe sa odhlási, tak potom ako sa vráti do prvého tabu vidí, že je stále prihlásený. Myslel som, že použitím triedy RevalidatingServerAuthenticationStateProvider by sa problém vyriešil. Po uplynutí času stanovenom v RevalidationInterval by sa mala volať validácia definovaná v ValidateAuthenticationStateAsync(AuthenticationState, CancellationToken). Ak sa auth state vyhodnotí ako neplaný (teda validácia vrátila false), tak je uživateľ odhlásený. Lenže z nejakého dôvodu sa spomínaná validačná metóda nevolá.

milantru commented 1 year ago

Update: RevalidatingServerAuthenticationStateProvider má v sebe metódu RevalidationLoop, ktorá má volať našu implementáciu metódy ValidateAuthenticationStateAsync, lenže riadok predtým je await Task.Delay(RevalidationInterval, cancellationToken);. Keď sa program dostane na tento riadok, preskočí do metódy IDisposable.Dispose, tam sa zavolá Cancel na cancellation tokene, čo spôsobí vyhodenie výnimky, tá sa odchytí v catch bloku (volanie ValidateAuthenticationStateAsync sa preskočilo), v ňom je break, ktorý nás vyhodí z whilu a RevalidationLoop sa tým končí.

V skratke... Po zmene auth statu sa zavolá RevalidationLoop, ktorý by mal zavolať našu implementáciu metódy ValidateAuthenticationStateAsync, ale namiesto toho pri dojdení na await sa aktivuje cancellation token, ktorý ukončí RevalidationLoop. Takže sa nestane nič.

Dôvod volania Dispose zostáva neznámy.