【问题标题】:Express - Can't send redirect, Response to preflight request doesn't pass access control checkExpress - 无法发送重定向,对预检请求的响应未通过访问控制检查
【发布时间】:2018-01-19 10:20:58
【问题描述】:

尝试将用户重定向到登录页面时,我总是收到此错误:

对预检请求的响应未通过访问控制检查: 响应中“Access-Control-Allow-Origin”标头的值必须 当请求的凭据模式为时,不是通配符“*” '包括'。因此,Origin 'null' 不允许访问。这 XMLHttpRequest 发起的请求的凭证模式是 由 withCredentials 属性控制。

在我的 express 应用程序中,我已经实现了 CORS:

var corsOptions = {
  origin:  'http://localhost:4200',
  credentials: true
}

app.use(cors(corsOptions));

然后我尝试重定向用户:

router.use(function(req,res,next){
    if((req.session.user == null){
        res.redirect('http://localhost:4200' + '/login')
    }
    else
        next();
});

在 Angular 4 上,我使用 {withCredentials : true} 发送所有请求,因为我使用的是 cookie;

这些是请求/响应标头:

回复:

访问控制允许凭据:true 访问控制允许来源:http://localhost:4200 连接:保持活动日期:2017 年 8 月 10 日星期四 12:09:55 GMT 地点:http://localhost:4200/login 设置cookie:semanaintegrada.session=s%3A6nieAv1pfn2V-2x7H4HbnqJFbYsgJmwy.hO1QKm%2Fgm6Kmso8pLCQ5zrZAVNhIYgfr%2BgzOB0oI9UA; 路径=/;过期=2017 年 8 月 10 日星期四 13:09:55 GMT Transfer-Encoding:chunked Vary:Origin X-Powered-By:Express

请求:

Accept:application/json, text/plain, / Accept-Encoding:gzip, deflate, br 接受语言:pt-BR,pt;q=0.8,en-US;q=0.6,en;q=0.4 缓存控制:无缓存连接:保持活动内容长度:39 内容类型:应用程序/json Cookie:semanaintegrada.session=s%3AwuiVwYs3Ahs4dfLULfpqMBcrnbthY7sZ.OYZk%2FCnZGHAe8v1T8nWpbAdFQVsXjUFAQxnYI27%2FZlE 主机:localhost:3000 来源:http://localhost:4200 Pragma:no-cache 引用者:http://localhost:4200/ User-Agent:Mozilla/5.0 (Windows NT 10.0; WIN64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.90 Safari/537.36

此外,在 Chrome 中创建了 4 个请求(我不知道为什么)。 3 到我的快递应用 和 1 到 localhost:4200 最后一个有 Access-Control-Allow-Origin:* 和 Origin null 这有关系吗?

【问题讨论】:

    标签: node.js express redirect routing cors


    【解决方案1】:

    “凭据标志” 指的是发出请求的 XMLHttpRequest.withCredentials,而不是 Access-Control-Allow-Credentials 标头。

    如果请求的withCredentialstrue,则Access-Control-Allow-Origin: *不能使用,即使没有Access-Control-Allow-Credentials header.

    【讨论】:

    • 但是我仍然需要发送'withCredentials'参数,因为我需要在我的请求中使用cookies,我该怎么办?
    猜你喜欢
    • 2019-12-05
    • 1970-01-01
    • 2019-10-28
    • 2016-06-05
    相关资源
    最近更新 更多