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

1.通常的跨域get和post,經過設置nginx就能夠解決。在nginx.conf的http中加入如下代碼便可php

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中深層次跨域設置。ios

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

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

clipboard.png

5.固然,我以爲這個方法爛透了。由於yii2開發原則是儘可能不要動vendor包。不知道有沒有大神,能給我提供一個更好的方法。跨域

相關文章
相關標籤/搜索