CORS 预检错误 redux & loopback API

Posted

技术标签:

【中文标题】CORS 预检错误 redux & loopback API【英文标题】:CORS preflight error redux & loopback API 【发布时间】:2016-08-21 02:00:09 【问题描述】:

我在 react-redux 上有一个客户端应用程序,在 loopback 上有一个 API 应用程序。

对于我的本地测试,我在端口 8080 上运行客户端应用程序,在端口 3000 上运行服务器应用程序。

当我尝试使用客户端应用程序测试 Google OAuth(使用 loopback-passport component)时,我收到以下错误。

当我使用 POSTMAN 对其进行测试时,没有任何问题。

这是客户端代码,

require('babel-polyfill'); 
import  CALL_API  from 'redux-api-middleware'; 
import C from '../constants';
const API_ROOT = 'http://localhost:3000';
function googleLogin()    return async(dispatch) => 
    const actionResp = await dispatch(
      [CALL_API]: 
        endpoint: API_ROOT + '/auth/google',
        headers: 
          'Access-Control-Allow-Credentials': 'false',
          'Access-Control-Allow-Methods': 'GET',
          'Access-Control-Allow-Origin': API_ROOT
        ,
        method: 'GET',
        types: ['GET', 'GET_SUCCESS', 'GET_FAILED']
      
    );

    if (actionResp.error) 
      console.log(actionResp);
      throw new Error('Some error in communication', actionResp);
     else 
      console.log(actionResp);
       
 ; 

环回中间件的CORS设置如下,

"cors": 
   "params": 
      "origin": true,
      "credentials": false,
      "maxAge": 86400
    
  

这听起来像一个简单的问题,在这里感谢任何帮助。

【问题讨论】:

你能不能 fork github.com/strongloop/loopback-sandbox 并创建一个示例项目。我已将我们的环回项目配置为使用 CORS。我会尽力帮忙的。 【参考方案1】:

目前大多数浏览器不支持预检请求的以下重定向。

在你的情况下试试这个:

    发出一个简单的请求来确定(使用 Fetch API 的 Response.url 或 XHR.responseURL 来确定真正的预检请求最终会到达哪个 URL)。 使用您在第一步中从 Response.url 或 XMLHttpRequest.responseURL 获得的 URL 发出另一个请求(“真正的”请求)。

Cross-Origin Resource Sharing (CORS) - Preflighted requests and redirects

【讨论】:

以上是关于CORS 预检错误 redux & loopback API的主要内容,如果未能解决你的问题,请参考以下文章

CORS 政策 - 对预检请求的响应

处理对 ASP.NET MVC 操作的 CORS 预检请求

CORS 预检响应错误

在启动中启用 CORS 失败并出现预检错误

CORS 预检响应未成功

为啥 CORS 错误“对预检请求的响应未通过访问控制检查”?