yii2 restful 401+nginx+axios跨域設置問題

1.一般的跨域get和post,通過設置nginx就可以解決。在nginx.conf的http中加入以下代碼即可

add_header Access-Control-Allow-Origin *;

add_header Access-Control-Allow-Headers X-Requested-With,Content-Type,x_requested_with;

add_header Access-Control-Allow-Methods HEAD,GET,POST,OPTIONS;

2.在上面的nginx跨域配置好的情況下。最近遇到一個問題,就是yii2 restful帶token請求,如果鑑權失敗返回401,axios獲取不到。找了半天發現是服務器端的問題。具體原理也不是很清楚,大體意思就是客戶端請求有幾個層次,鑑權的代碼比較靠前,並沒有用到nginx的跨域。所以,雖然接口正確返回了401,但是axios由於跨域限制取不到這個值。這個需要在yii2中深層次跨域設置。

3.第一個想到的就是在父級controller的behaviors中加入cors設置。這個是yii2自帶的一個配置。但是發現客戶端報錯,意思是不能有兩個相同的跨域域名。因爲這樣yii2的跨域設置和nginx的跨域設置衝突了。

4.找了半天,最後找到一個不是很完美的解決方案,就是在yii/filters/auth/AuthMethod.php裏邊加入了跨域的設置。因爲實在沒有找到其他什麼地方,可以在authenticatior失敗之前設置自定義header來跨域。

clipboard.png

5.當然,我覺得這個方法爛透了。因爲yii2開發原則是儘量不要動vendor包。不知道有沒有大神,能給我提供一個更好的方法。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章