Yii Error 400尝试删除帖子时无法验证CSRF令牌

时间:2012-06-22 08:59:58

标签: php yii

当我尝试删除帖子时,我收到了此错误:

Yii Error 400 The CSRF token could not be verified

我不知道究竟是什么造成了这种情况以及它可能与之相关。这是我的动作删除:

    public function actionDelete($id) {

         if (Yii::app()->request->isPostRequest) {
                // we only allow deletion via POST request
                $this->loadModel($id)->delete();

                // if AJAX request (triggered by deletion via admin grid view), we should not redirect the browser
                if (!isset($_GET['ajax']))
                $this->redirect(isset($_POST['returnUrl']) ? $_POST['returnUrl'] : array('admin'));
        }
        else
              throw new CHttpException(400, 'Invalid request. Please do not repeat this request again.');
    }

    protected function afterDelete()
    {
        parent::afterDelete();
        Image::model()->deleteAll('name='.$this->id);
        Date::model()->deleteAll('tbl_show_id='.$this->id);
        Press::model()->deleteAll('tbl_show_id='.$this->id);
    }

4 个答案:

答案 0 :(得分:20)

我有同样的问题,但以下解决了这个问题。希望能帮助到你。 我添加了

'params'=> array('YII_CSRF_TOKEN' => Yii::app()->request->csrfToken)

到以下代码:

<?php
    echo CHtml::linkButton('Delete',array(
        'submit'=>$this->createUrl('delete',array('id'=>$model->id)),
        'confirm'=>"Are you sure want to delete ".$item->product->name."from the shopping cart?",
        'params'=> array('YII_CSRF_TOKEN' => Yii::app()->request->csrfToken)));
?>

感谢。

答案 1 :(得分:9)

您似乎启用了CSRF validation。如果要使用它,请阅读文档并确保在每个POST请求中发送CSRF令牌。

答案 2 :(得分:1)

CSRF将继续为您提供此错误,因为您正在使用网址(GET)

进行删除

为了使用CSRF验证,您应该使用生成CSRF令牌的有效表单发出请求,并在每个帖子中提交。

查找: Yii CForm

答案 3 :(得分:-1)

即使您正确地遵循了Yii CSRF文档,您的错误也可能是由缓存系统引起的。在我的情况下,服务器缓存了登录页面,然后使用登录表单一遍又一遍地提供相同的令牌,从而在验证时返回false。