【发布时间】:2019-08-29 05:46:52
【问题描述】:
我在 nodejs/expressjs 中开发了一个 api,我正在使用 Postman 进行测试,它工作正常,但是当我在 Laravel 中使用 axios 调用进行测试时,它不起作用。
我收到以下错误:
从源“https://account.loc”访问“https://api.xxxxxxx/api/v1/connectors/mysql/test”处的 XMLHttpRequest 已被 CORS 策略阻止:预检响应中的 Access-Control-Allow-Headers 不允许请求标头字段 x-csrf-token。
和
错误:网络错误
在 createError (app.js:18565)
在 XMLHttpRequest.handleError (app.js:18449)
警告:
跨域读取阻塞 (CORB) 阻止了 MIME 类型为 application/json 的跨域响应 https://api.xxxxxxxxx/api/v1/connectors/mysql/test。详情请见https://www.chromestatus.com/feature/5629709824032768。
我尝试在我的 API 的标头中添加 CORS,如下所示:
// token verification
router.use((req, res, next) => {
res.header('Access-Control-Allow-Origin', '*');
res.header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE,OPTIONS');
res.header('Access-Control-Allow-Headers', 'Content-Type, Authorization, Content-Length, X-Requested-With');
...
我在在线测试 API 网站上进行测试并且调用工作正常,所以现在我想知道 Laravel 配置中是否缺少一些东西。 我意识到 API 客户端从不从标头中读取令牌(仅在 Laravel + axios 中)。 有人可以帮我吗?
谢谢!
【问题讨论】:
-
真的只是在这里猜测,但我想说 Axios 已配置为将
x-csrf-token添加到所有 AJAX 请求中,假设没有外部请求。您应该覆盖/删除此特定请求的标头。 -
我试过这个 Phil 但我只是创建了一个全新的 axios 实例来发出 ajax 请求,所以没有使用任何 Laravel 默认标头。但是谢谢:)
标签: node.js laravel express vue.js axios