如果请求来自 VueJS,NodeJs Passport 执行 CORS 飞行前
Posted
技术标签:
【中文标题】如果请求来自 VueJS,NodeJs Passport 执行 CORS 飞行前【英文标题】:NodeJs Passport performs CORS pre-flight if request comes from VueJS 【发布时间】:2018-05-19 15:28:44 【问题描述】:我正在编写一个使用 Passport 和 Saml-Stategy 的 NodeJS / Express 后端。我使用外部身份提供程序和 VueJs 作为前端。
如果我从浏览器(Chrome + IE)向后端发出 API 请求,一切正常。请求进入后端,作为 GET 请求进入 IdP,然后通过身份验证返回。
但是,如果我加载执行相同请求的 VueJs 应用程序,则护照会发出一个 CORS 飞行前 (OPTIONS) 请求,该请求从 IdP 返回为 404,因为不支持 OPTIONS。我试过Vue-Resource和Axios,结果都一样。
很遗憾,我无法更改 IdP 上的任何设置。但是为什么我在后端的护照对请求的处理方式不同呢?有任何想法吗?
我比较了来自 API 调用和 VueJ 的请求标头,但我找不到任何会导致预检的标头。
存储库:https://github.com/tmschbgr/NodePassportExample
版本:
节点:8.9.0 快递:4.16.2 护照:^0.4.0 护照-saml:^0.31.0 Vue:^2.4.4 Axios:^0.17.1【问题讨论】:
【参考方案1】:我发现这是由于时间问题造成的。
它使用以下逻辑:
-
请求到达后端,检查是否经过身份验证
如果没有,请转到 IdP 并返回。如果成功重定向到 /
在身份验证检查后提供静态文件。这样,只有在用户通过身份验证时,应用才会被提供。
【讨论】:
以上是关于如果请求来自 VueJS,NodeJs Passport 执行 CORS 飞行前的主要内容,如果未能解决你的问题,请参考以下文章
为啥来自 Vuejs 的 Laravel 8 的 AJAX POST 请求会引发 405(不支持的方法)错误?
与Vuejs SPA + Nodejs API的CORS问题