[英]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 。 這是解決方法:
TokenGeneratorInterface
的實現注冊為服務。 CustomCsrfTokenGeneratorPass
。 有兩種不同的注冊方法,具體取決於您是捆綁軟件還是應用程序。 $container->findDefinition()
方法查找CsrfTokenManager
的注冊定義。 $definition->setArgument()
來修改服務定義。 用參考替換您選擇的參數。 新參考('your-custom-crsf-token-generator-service-id')。 確保查看編譯器傳遞文檔以獲取更多信息。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.