當 Symfony 對會話中的用戶進行身份驗證時,是否有任何事件?LoginSuccessEvent似乎只在互動式登錄期間被觸發,例如在使用登錄表單時而不是在為已經登錄的用戶加載新頁面時。
細節:
我正在開發一個基于 Symfony 6.1 的專案,我按照 Symfony 檔案(例如此處和此處)中的說明來構建基于用戶類和登錄表單的安全性。
一切正常:對受限頁面的訪問被防火墻阻止,用戶被重定向到他可以登錄的登錄表單。登錄后,可以訪問所有頁面,直到登錄過期。
提交登錄表單LoginSuccessEvent后被觸發。但是,當使用會話中的用戶加載新頁面時,不會觸發此事件。這種身份驗證是否還有其他安全事件?我在檔案中發現的所有事件似乎都不適用于這種情況。
uj5u.com熱心網友回復:
實際上,該事件僅在登錄時執行一次。或者,您可以創建一個kernel.request將在每個請求時觸發的事件。在這種情況下,您可以將 Security 組件傳遞給建構式引數并獲取當前用戶并執行必要的操作
use App\Entity\User;
use Symfony\Component\HttpKernel\Event\RequestEvent;
use Symfony\Component\Security\Core\Security;
class UserListener
{
private Security $security;
public function __construct(Security $security)
{
$this->security = $security;
}
public function onKernelRequest(RequestEvent $event)
{
$user = $this->security->getUser();
if (!$event->getRequest()->isXmlHttpRequest() and $user instanceof User){
// do something ...
dump($user);
}
}
}
在 services.yaml 中注冊監聽器
App\EventListener\UserListener:
tags:
- {name: kernel.event_listener, event: kernel.request }
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/494910.html
