【问题标题】:How to use CSRF token in Silex 2 via Twig template?如何通过 Twig 模板在 Silex 2 中使用 CSRF 令牌?
【发布时间】:2017-05-18 19:58:44
【问题描述】:

我已经注册了一个 CsrfServiceProvider()

$app->register(new Silex\Provider\CsrfServiceProvider());

我的表格:

<form action="{{ url('some.action') }}" method="post">
  <input type="text" name="blah-blah" value="" placeholder="">
  <input type="hidden" name="_csrf_token" value="">{# how to output SCRF token here? #}
<button type="submit" class="btn btn-success">Submit</button>

感谢您的帮助!

解决方案(我对V-Light答案的解读)

控制器:

$app->get('/', function() use ($app) {
  $tokenId = 'intention';
  $csrf_token = $app['csrf.token_manager']->getToken($tokenId);

  return $app['twig']->render('home.twig', [
    'csrf_token' => $csrf_token,
  ]);
})->bind('home');

模板: &lt;input type="hidden" name="_csrf_token" value="{{ csrf_token }}"&gt;

【问题讨论】:

    标签: symfony twig csrf silex


    【解决方案1】:

    我假设你不使用来自 symfony 的Forms(FormServiceProvide ins silex world)并且没有像这样的表单树枝助手

    <input type="hidden" name="_csrf_token" value="{{- csrf_token('intention') -}}">
    

    但是还是先试试吧,也许我的假设不正确,它已经奏效了:)

    FormServiceProvider

    尝试安装Forms for Silex

    然后看Usage documentaion-block of CSRF for Silex

    注册 CSRF 服务提供者后,所有通过表单服务提供者创建的表单默认都受到 CSRF 保护。

    所以这很不言自明;)您唯一应该做的事情 - 使用 FormServiceProvider 创建表单(请参阅文档)并在 twig 中正确呈现它们,而不是自己编写普通的旧 html。

    但是……

    即使不使用 Symfony 表单组件,您也可以使用 CSRF 保护。:

    此时您可以创建自己的 twig-helpers 等等,或者 只需使用

    $tokenId = 'intention'; 
    $csrf_token = $app['csrf.token_manager']->getToken($tokenId);
    

    然后将 $csrf_token 变量传递给您的 twig-view 并以如下形式使用它

    当然,检查给定/提交的令牌是否有效 - 每次您使用 csrf-token 提交表单时您的工作(请参阅 Silex 的 CSRF 文档的使用部分)

    【讨论】:

    • 感谢您的回答!它为我醒来))我将在 nexr 评论中描述方式
    • 能否请您提供如何检查登录表单中的 csrf_token 是否有效的方法?
    猜你喜欢
    • 2017-11-20
    • 1970-01-01
    • 1970-01-01
    • 2012-08-14
    • 2011-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-03
    相关资源
    最近更新 更多