yii2 - 如何解决错误请求(#400)无法验证您的数据提交?

时间:2015-07-25 03:12:54

标签: php yii2 bad-request

我有一个由Gii生成的控制器。我将行为修改为:

public function behaviors()
{
    return [
        'verbs' => [
            'class' => VerbFilter::className(),
            'actions' => [
                'delete' => ['post'],
            ],
        ],
        'access' => [
            'class' => AccessControl::className(),
            'rules' => [
                [
                    'allow' => true,
                    'roles' => ['@'],
                ],
            ],
        ],
    ];
}

当我填写表格并提交时,有时我会收到错误

Bad Request (#400) Unable to verify your data submission

但是,如果我点击浏览器中的后退按钮并再次重新提交具有相同值的表单,则可以成功提交。

我一直在搜索谷歌和stackoverflow,其中许多人说问题出在CSRF令牌上。但是在我的布局中,我放了<?= Html::csrfMetaTags() ?>,在我的表单中有<input type="hidden" name="_csrf" value="...">

这里有人可以帮我解决这个问题吗?并解释为什么会发生这种情况?

2 个答案:

答案 0 :(得分:4)

在视图中添加表单

<input type="hidden" name="_csrf" value="<?=Yii::$app->request->getCsrfToken()?>" />

答案 1 :(得分:-3)

我遇到了同样的问题,最终禁用了csrf验证。

public function actionCreate() {
    Yii::$app->controller->enableCsrfValidation = false;
}

这似乎是为我做的。