【发布时间】:2014-11-01 15:15:51
【问题描述】:
我在我的视图中缓存了包括表单在内的 html 片段。
<?php $form = ActiveForm::begin(); ?>
<?php echo $form->field($model, 'name'); ?>
<?= Html::submitButton('Save') ?>
<?php ActiveForm::end() ?>
问题在于 CSRF 验证令牌 - 它应该是动态的(不是静态的)。有没有其他/更好的方法可以在不禁用和再次启用的情况下呈现它?
<?php Yii::$app->request->enableCsrfValidation = false; ?>
<?php $form = ActiveForm::begin(); ?>
<?php Yii::$app->request->enableCsrfValidation = true; ?>
<input type="hidden" name="_csrf" value="<?php echo $this->renderDynamic('return Yii::$app->request->csrfToken;'); ?>">
<?php echo $form->field($model, 'name'); ?>
<?= Html::submitButton('Save') ?>
<?php ActiveForm::end() ?>
如果我不禁用和启用 CsrfValidation 我在 html 中有两个令牌 - 第一个来自缓存,第二个是动态的。
【问题讨论】:
-
您不必这样做。您是否在布局 main.php 文件中添加了 csrf 元标记?并更新您的作曲家一次
-
确定我确实更新了所有内容。如果我不这样做,我的表单中有两个隐藏的 _csrf 令牌......
-
检查您的浏览站点 login.php 页面。他们正在使用主动形式。检查那里有多少个 csrf 令牌。让我知道
-
只有一个。但这是因为它没有被缓存 - 问题只是缓存代码块中的重复令牌 - 因为令牌应该是动态的(不缓存)我必须做这个解决方法......