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

14

当我尝试删除一篇文章时,出现了以下错误:

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个回答

21
我遇到了相同的问题,但以下操作解决了它。希望对你有帮助。我添加了
'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)));
?>

谢谢。


10

看起来您已启用CSRF验证。如果您想使用它,请阅读文档,并确保在每个POST请求中发送CSRF令牌。


1

CSRF会一直给你报错,因为你是通过URL(GET)进行删除操作的。

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

查找: Yii CForm


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

这是我的应用程序中的问题,也是一个有效的边缘情况。 - seyisulu

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接