默認狀況下yii2是開啓了csrf驗證功能的,若是須要關閉它的話,只要在控制器中設置一個屬性就能夠:jquery
public $enableCsrfValidation = false;
通常狀況下不建議關閉,但api場景可能須要關閉。ajax
token生成有三種方式後端
在模板中使用 <?=yii\helpers\Html::csrfMetaTags();?>
便可生成meta標籤,以下api
<meta name="csrf-param" content="_csrf"> <meta name="csrf-token" content="NnNIMTVXUFJuN3tJDDAPAFk4OWBFOAgiBEIiX1kUPTdlJytXQAh9YQ==">
meta標籤主要是給ajax用的,ajax提交的時候能夠直接從meta中獲取csrf-token而後一併提交給後端,csrf-param就是參數名稱,也能夠直接經過header頭提交,以jquery爲例:yii2
$.ajaxSetup({ headers: { 'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content') } });
使用 <?=yii\helpers\Html::beginForm();?>
替代手動輸入 <form>
標籤,yii2框架會自動添加一個隱藏的input,相似下面這樣:app
<form> <input type="hidden" name="_csrf" value="NnNIMTVXUFJuN3tJDDAPAFk4OWBFOAgiBEIiX1kUPTdlJytXQAh9YQ==">
固然,爲了保持對稱,建議使用 <?=yii\helpers\Html::endForm();?>
替代 </form>
框架
<?=Yii::$app->request->getCsrfToken();?>
能夠直接獲取到token,這樣隨便放在哪一個位置,比較靈活。但記得post的時候要記得提交給後端,參數名字的話默認是 _csrf
,也能夠經過 Yii::$app->request->csrfParam
獲取。yii