当我尝试删除帖子时,我收到了此错误:
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);
}
答案 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。