【问题标题】:Yii - Error 400 The CSRF token could not be verifiedYii - 错误 400 无法验证 CSRF 令牌
【发布时间】:2012-09-16 22:55:32
【问题描述】:

我有一个很奇怪的问题。我在 Yii 中有一个登录表单,效果很好。将网站移动到另一台服务器后,我得到了

错误 400 无法验证 CSRF 令牌

我不明白为什么它在开发服务器上工作,但在新服务器上却没有。这是我的代码:

<div class="form">

<?php $form=$this->beginWidget('CActiveForm', array(
    'id'=>'login-form',
    'enableClientValidation'=>true,
    'clientOptions'=>array(
       'validateOnSubmit'=>true,
    ),
)); ?>


<div class="row">
    <?php echo $form->labelEx($model,'username'); ?>
    <?php echo $form->textField($model,'username'); ?>
    <?php echo $form->error($model,'username'); ?>
</div>

<div class="row">
    <?php echo $form->labelEx($model,'password'); ?>
    <?php echo $form->passwordField($model,'password'); ?>
    <?php echo $form->error($model,'password'); ?>
</div>

<div class="row buttons">
    <?php echo CHtml::submitButton('Submit'); ?>
</div>

<?php $this->endWidget(); ?>

这是我的配置文件中的 csrf 配置:

'enableCsrfValidation' => !isset($_POST['dontvalidate']) ? true : false,

如果您需要查看示例。 Here 是正在工作的那个,here 是有问题的那个

【问题讨论】:

  • 也许您的cookieParams 在新部署的上下文中无效?
  • 你能解释一下你的意思吗?

标签: authentication yii csrf bad-request


【解决方案1】:

我打开第一个例子,在源码中找到了这个html,这是正确的。

<input type="hidden" value="df5a0fc9ab86f85cdcdabe6b2ee62e85d3ac0323" 
      name="YII_CSRF_TOKEN" />

在第二个示例页面上,我没有找到上述任何 html 代码。这意味着 enableCsrfValidation 在第二个示例中设置为 false

尝试在此页面(或在 config/main.php 中)调试 $_POST['dontvalidate']。

【讨论】:

  • 我不知道为什么,因为它与我上传到另一台服务器的代码相同。无论如何,在 config/main.php 中,我将 enableCsrfValidation 设置为 false,因此完全禁用了它,现在它可以工作了。但我猜这不是最好的方法!
猜你喜欢
  • 1970-01-01
  • 2016-03-05
  • 1970-01-01
  • 2016-04-15
  • 2016-02-28
  • 2012-09-12
  • 2017-01-01
  • 1970-01-01
  • 2022-12-15
相关资源
最近更新 更多