2015-07-25 19 views
6

Ich habe einen Controller von Gii generiert. Ich, das Verhalten ändern, so sein:yii2 - So lösen Sie eine fehlerhafte Anfrage (# 400) Sie können Ihre Dateneingabe nicht bestätigen?

public function behaviors() 
{ 
    return [ 
     'verbs' => [ 
      'class' => VerbFilter::className(), 
      'actions' => [ 
       'delete' => ['post'], 
      ], 
     ], 
     'access' => [ 
      'class' => AccessControl::className(), 
      'rules' => [ 
       [ 
        'allow' => true, 
        'roles' => ['@'], 
       ], 
      ], 
     ], 
    ]; 
} 

Wenn ich das Formular ausfüllen und abschicken, manchmal bekomme ich einen Fehler

Bad Request (#400) Unable to verify your data submission

Aber wenn ich auf Back-Button in meinem Browser und Übermitteln Sie das Formular erneut mit dem gleichen Wert, es wird in Ordnung sein und erfolgreich gesendet werden.

Ich habe in Google und stackoverflow gesucht, viele von ihnen sagen, dass das Problem auf CSRF Token ist. Aber in meinem Layout habe ich <?= Html::csrfMetaTags() ?> und in meinem Formular gibt es <input type="hidden" name="_csrf" value="...">

Jeder hier kann mir helfen, dies zu lösen? Und erklären Sie, warum passiert das?

+0

Sie laden Sie jede Datei in Form? –

+0

Nein .. nur Textarea, Text eingeben, dan Kontrollkästchen auswählen. –

+0

csrf ist zeitbezogen, können Sie Ihre Uhren (Server und Browser) überprüfen? –

Antwort

-2

Ich hatte das gleiche Problem und am Ende gesperrt csrf Validierung.

public function actionCreate() { 
    Yii::$app->controller->enableCsrfValidation = false; 
} 

Das schien es für mich zu tun.

+0

Was macht die csrf-Validierung? ist es gut, es zu deaktivieren? – MeV

+1

Es ist eine Validierungsmethode, um Cross-Browser-Angriffe zu verhindern. Wenn Sie keine wichtigen Informationen in Ihrem Post/Anfrage erhalten, dann ist es sicher, es zu deaktivieren ... –

+1

Oh ich sehe, vielen Dank! – MeV

3

hinzufügen im Blick

<input type="hidden" name="_csrf" value="<?=Yii::$app->request->getCsrfToken()?>" />