第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Symfony 令牌在訂閱者中為空

Symfony 令牌在訂閱者中為空

PHP
森林海 2023-05-26 17:23:54
我為需要訪問當前登錄用戶的 prePersist 和 preFlush 事件創(chuàng)建了一個監(jiān)聽器:<?phpnamespace App\EventListener;use App\Entity\AbstractEntity;use App\Entity\User;use Doctrine\Common\EventSubscriber;use Doctrine\ORM\Events;use Doctrine\Persistence\Event\LifecycleEventArgs;use Exception;use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;use Syfony\Component\Security\Core\User\UserInterface;use function is_object;class DatabaseActivitySubscriber implements EventSubscriber{    /**     * @var TokenInterface|null     */    private ?TokenInterface $token;    public function __construct(TokenStorageInterface $tokenStorage)    {        $this->token = $tokenStorage->getToken();    }    /**     * @return array|string[]     */    public function getSubscribedEvents()    {        return [            Events::prePersist,            Events::preUpdate,        ];    }    /**     * Initialise le nom de l'utilisateur a l'origine de la création sous la forme "Nom Prénom (id)"     *     * @param LifecycleEventArgs $args     * @throws Exception     */    public function prePersist(LifecycleEventArgs $args)    {        if ($args->getObject() instanceof AbstractEntity) {            $args->getObject()->setCreateUser($this->getUser()->getLastName() . ' ' . $this->getuser()->getLastName() . ' (' . $this->getuser()->getId() . ')');        }    }    /**     * @return string|\Stringable|UserInterface|null|User     */    private function getUser()    {        if (null === $token = $this->token) {            return null;        }        if (!is_object($user = $token->getUser())) {            // e.g. anonymous authentication            return null;        }        return $user;    }但令牌始終為空。并且用戶可以通過 $this->getUser(); 很好地檢索到。緊接著,我的 dataBaseSubscriber 啟動了,并且在構造函數(shù)中令牌為空。實際上是相同的標記。我檢查了“security.token_storage”是否正確自動裝配,我也試圖在 service.yml 中強制它這讓我很困惑。UsageTrackingStorage 的這兩個實例之間的唯一區(qū)別是一個在控制器中使用,另一個在訂閱者中使用。但它應該注入相同的實例......
查看完整描述

1 回答

?
嗶嗶one

TA貢獻1854條經驗 獲得超8個贊

訂閱者(如您的訂閱者)很可能在請求生命周期的早期就已初始化。也就是說,在為所有授權內容拆分請求之前。

TokenStorage 是正確的,但是,在您的訂閱者初始化(讀?。罕徽{用)的那一刻,__construct除了對象本身之外幾乎什么都不存在,但它仍然是空的(顯然)。有/可以有 EventSubscribers 可以更改身份驗證過程,所以如果令牌已經存在,那將是荒謬的。(事實上我相信 symfony 中的授權是通過 EventListeners 完成的)。

因此,當在該點上getToken()調用它時,它返回 null,因為它不包含任何令牌,但稍后會添加這些令牌。

解決方案非常簡單:只需存儲 TokenStorage - 而不是(空)令牌 - 并在您實際需要它時稍后調用“getToken”并且其中實際上有令牌。開銷幾乎可以忽略不計(緩存可能是可能的,但沒有看到一個很好的理由)。


查看完整回答
反對 回復 2023-05-26
  • 1 回答
  • 0 關注
  • 165 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號