Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在Symfony 3.4中设置自定义CsrfTokenGenerator_Php_Symfony_Csrf_Csrf Protection_Symfony 3.4 - Fatal编程技术网

Php 在Symfony 3.4中设置自定义CsrfTokenGenerator

Php 在Symfony 3.4中设置自定义CsrfTokenGenerator,php,symfony,csrf,csrf-protection,symfony-3.4,Php,Symfony,Csrf,Csrf Protection,Symfony 3.4,我正在Symfony 3.4中构建一个示例,演示如何不生成CSRF令牌(出于教育目的)。我已经制作了一个自定义的CsrfTokenGenerator,它实现了tokengenerator接口,但是现在我想配置CsrfTokenManager,它是Symfony中内置的,可以使用这个生成器来生成CSRF令牌,而不是默认的。如何在Symfony yml文件中配置此功能?或者有没有其他方法来实现这一点 CsrfTokenManager构造函数具有以下签名public function\uu构造(Tok

我正在Symfony 3.4中构建一个示例,演示如何不生成CSRF令牌(出于教育目的)。我已经制作了一个自定义的
CsrfTokenGenerator
,它实现了
tokengenerator接口
,但是现在我想配置
CsrfTokenManager
,它是Symfony中内置的,可以使用这个生成器来生成CSRF令牌,而不是默认的。如何在Symfony yml文件中配置此功能?或者有没有其他方法来实现这一点


CsrfTokenManager
构造函数具有以下签名
public function\uu构造(TokenGeneratorInterface$generator=null,TokenStorageInterface$storage=null,$namespace=null)
,因此可以将自定义的
TokenGeneratorInterface
作为参数,但如何设置此参数,由于我们无法直接访问此控制器。

嗯,这是一个很好的控制器。做这件事没有简单的方法。简单地说,我指的是重写配置参数

在这种情况下,你可以利用。以下是解决方法:

  • TokenGeneratorInterface
    的实现注册为服务
  • 然后,创建并注册一个编译器过程。您可以将其命名为
    CustomCsrfTokenGeneratorPass
    。根据您是在捆绑包中还是在应用程序中,有不同的注册方式
  • 在该编译器过程中,您可以访问容器生成器。使用
    $container->findDefinition()
    方法查找
    CsrfTokenManager
    的注册定义
  • 然后通过调用服务定义上的
    $definition->setArgument()
    来修改服务定义。将您选择的参数替换为引用`新引用('your-custom-crsf-token-generator-service-id')
  • 享受
  • 确保查看编译器传递文档以了解更多信息