簡體   English   中英

在Symfony 3.4中設置自定義CsrfTokenGenerator

[英]Set custom CsrfTokenGenerator in Symfony 3.4

我正在Symfony 3.4中構建一個示例,展示了如何不生成CSRF令牌(出於教育目的)。 我已經制作了實現TokenGeneratorInterface的自定義CsrfTokenGenerator ,但是現在我想配置Symfony中內置的CsrfTokenManager ,以使用此生成器生成CSRF令牌而不是默認的令牌。 如何在Symfony yml文件中配置它? 還是有其他方法可以實現這一目標?

CsrfTokenManager構造函數具有以下簽名public function __construct(TokenGeneratorInterface $generator = null, TokenStorageInterface $storage = null, $namespace = null) ,因此可以將自定義TokenGeneratorInterface作為參數,但是如何設置此參數,就像我們不這樣做一樣無法直接訪問此控制器。

嗯,這是一個很好的。 沒有簡單的方法可以做到這一點。 通過簡單的方式,我的意思是覆蓋config參數。

在這種情況下,您可以使用Compiler Pass 這是解決方法:

  1. TokenGeneratorInterface的實現注冊為服務。
  2. 然后,創建並注冊一個編譯器通道。 您可以將其命名為CustomCsrfTokenGeneratorPass 有兩種不同的注冊方法,具體取決於您是捆綁軟件還是應用程序。
  3. 在該編譯器傳遞中,您可以訪問容器構建器。 使用$container->findDefinition()方法查找CsrfTokenManager的注冊定義。
  4. 然后通過在其上調用$definition->setArgument()來修改服務定義。 用參考替換您選擇的參數。 新參考('your-custom-crsf-token-generator-service-id')。
  5. 請享用。

確保查看編譯器傳遞文檔以獲取更多信息。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM