2012-06-22 8 views
13

Khi tôi đã cố gắng để xóa một bài tôi đã nhận lỗi này:Yii Lỗi 400 CSRF dấu hiệu không thể xác minh khi cố gắng xóa các bài

Yii Error 400 The CSRF token could not be verified 

Tôi không biết những gì là chính xác gây ra điều này và những gì nó có thể liên quan. đây là hành động của tôi xóa:

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

Trả lời

8

Có vẻ như bạn đã bật CSRF validation. Nếu bạn muốn sử dụng nó, hãy đọc tài liệu và đảm bảo bạn gửi mã thông báo CSRF trong mọi yêu cầu POST.

1

CSRF sẽ tiếp tục đem lại cho bạn lỗi này bởi vì bạn đang xóa bằng cách sử dụng một địa chỉ URL (GET)

Để sử dụng xác nhận CSRF, bạn nên thực hiện yêu cầu của bạn sử dụng một hình thức hợp lệ mà tạo ra các CSRF token và nộp với mỗi bài đăng.

Lookup: Yii CForm

18

tôi đã cùng một vấn đề nhưng sau đây giải quyết nó. Hy vọng nó giúp. tôi thêm

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

để đoạn mã sau:

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

Cảm ơn.