2017-11-18 198 views
0

我需要在每个端点上启用CORS,以匹配/api/v1/support/*路径的POST请求。如何使用“cors”库在Express路径上配置CORS

我正在向凭证输入/api/v1/support/graphql的POST请求,但预检请求(OPTIONS一)返回401.我不确定我做错了什么。

这是我的配置(注意,我在下面这个样本中已经改变的实际域虚拟):

const corsOptions = { 
    origin: /mydomain\.com$/, 
    credentials: true, 
    maxAge: 3600 
}; 
app.options('/api/v1/support/*', cors(corsOptions)); 
app.post('/api/v1/support/*', cors(corsOptions)); 

// graphQLRouter is an instance of express.Router() 
app.use('/api/v1/support/graphql', [ fowardIP, validateTokenInCookie ], graphQLRouter); 
+0

在服务器上是request.OPTIONS每规范,即访问控制允许的方法的法律,” .... 。,OPTIONS',除了浏览器做出'预检'请求之外,您还可能需要调整服务器以符合规范。请参阅access_control标题下的'ALLOW_ORIGIN','ALLOW_METHODS','ALLOW_HEADERS' –

+0

浏览器不要'在CORS预检选项请求中发送凭证。显然,在您的应用程序代码的某处,您需要对'/ api/v1/support/graphql'路由进行验证,这对于POST请求来说很合适,因为如果您的前端代码将该凭证作为该POST的一部分发送,那会按预期工作。但是这对于OPTIONS请求并不好。如果没有服务器需要验证,这需要在没有任何证书发送的情况下运行。 – sideshowbarker

回答

0

能否请您试试这个。设置访问控制也

const app = express(); 
 
const corsOptions = { 
 
    origin(origin, callback) { 
 
    callback(null, true); 
 
    }, 
 
    credentials: true 
 
}; 
 
app.use(cors(corsOptions)); 
 
var allowCrossDomain = function(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,token'); 
 
    next(); 
 
} 
 
app.use(allowCrossDomain);

这可能会帮助你

+0

谢谢,但它没有奏效。我的配置有什么问题? –