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

48 声望
1 粉丝
0 条评论
推荐阅读
nuxt移动端适配
根据有赞的vant官网的提示,用了两个插件 postcss-pxtorem和lib-flexible 以下是有赞官网的提示 第一步:用yarn安装上面两个插件。 第二步:引用postcss-pxtorem 需要配置到nuxt.config.js的build中 第三步:把fl...

弘道者人阅读 6.2k评论 3

如何使用 PHPStorm 进行优雅的项目开发?
PHP Storm 这个开发工具,很多 phper 应该有所耳闻,甚至也有不少人使用其作为生产工具,但是很多人都没有最大限度的使用它,本文就来总结一些优雅开发的小技巧。

唯一丶45阅读 4.8k评论 7

怎样用 PHP 来实现枚举?
在数学和计算机科学理论中,一个集的枚举是列出某些有穷序列集的所有成员的程序,或者是一种特定类型对象的计数。这两种类型经常(但不总是)重叠。枚举是一个被命名的整型常数的集合,枚举在日常生活中很常见,...

唯一丶25阅读 6.3k评论 4

Vue中的diff算法
diff算法是一种通过同层的树节点进行比较的高效算法,避免了对树进行逐层搜索遍历,所以时间复杂度只有 O(n)。diff算法的在很多场景下都有应用,例如在 vue 虚拟 dom 渲染成真实 dom 的新旧 VNode 节点比较更新时...

款冬27阅读 13.3k评论 7

给我实现一个前端的 Excel 导入和导出功能
前言【负责人 A】:现在报表部分基于接口的 Excel 的导入和导出功能有点慢,前端这边能不能实现一下这个功能,然后我们在比对看看效果!【切图仔 B】: 接口这边不能优化一下吗?比如排查下慢的原因什么的。【负...

熊的猫19阅读 2.5k

封面图
一个开源vue网站博客,nuxt开源网站,前后端分离项目
开媛笔记,基于nuxt ssr首屏服务器端渲染 。用于分享、记录、交流和学习,希望可以帮助到小伙伴们。同时网站在不断更新,创造属于猿(媛)的世界 -$Bao Yalong ..Let's Go! [链接]

jigsaw16阅读 8.4k评论 3

你知道前端水印功能是怎么实现的吗?
前一段时间由于项目需要实现水印功能,于是去了解了相关的内容后,基于 Vue 的实现了一个 v-watermark 指令完成了对应的功能,其实整体内容并不复杂!

熊的猫14阅读 1.6k

封面图
48 声望
1 粉丝
宣传栏