Вопрос по php, yii – Ошибка 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   ответа
-1

Даже если вы правильно следовали документации по Yii CSRF, ваша ошибка могла быть вызвана системой кэширования. В моем случае сервер кэшировал страницу входа в систему и затем снова и снова обслуживал один и тот же токен с помощью формы входа, возвращая при проверке значение false.

1

CSRF будет продолжать выдавать вам эту ошибку, потому что вы удаляете, используя URL (GET)

Чтобы использовать проверку CSRF, вы должны сделать запрос, используя действующую форму, которая генерирует токен CSRF и отправляет его с каждым сообщением.

Уважать: Yii CForm

9

Похоже, вы включеныПроверка CSRF, Если вы хотите использовать его, прочитайте документацию и убедитесь, что вы отправляете токен CSRF в каждом запросе POST.

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)));
?>

Благодарю.

Похожие вопросы