yii2 restful 401+nginx+axios跨域设置问题

0

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包。不知道有没有大神,能给我提供一个更好的方法。

你可能感兴趣的

克塞 · 6月14日

在nginx或index.php里设置跨域就可以了,不要用yii提供的跨域配置。

回复

0

谢谢回复。但是你可能没看明白我的意思。跨域我如果只在nignx或者index.php内配置的话,yii的queryparamAuth鉴权失败返回401的时候,前端是获取不到数据的。这篇文章主要是解决这个401返回的问题

弘道者人 作者 · 6月16日
载入中...