【问题标题】:CORS that require preflight, using passport, express angularjs需要预检的CORS,使用护照,表达angularjs
【发布时间】:2016-01-20 09:43:18
【问题描述】:

我目前正在实施一个在服务器端使用 express 和 passport 的应用程序。每次用户尝试登录时,都会激活护照身份验证,有两个参数 - successRedirectfailureRedirect

app.post('/login',
   passport.authenticate('local', {
   successRedirect: '/',
   failureRedirect: '/login',
 })
);

我有以下标题

app.use(function(req, res, next) {
  res.setHeader('Access-Control-Allow-Origin', '*');
  res.setHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS, PUT, PATCH, DELETE');
  res.setHeader('Access-Control-Allow-Headers', 'X-Requested-With,content-type');
  res.setHeader('Access-Control-Allow-Credentials', true);
  next();
});

我的服务器有网址:http://localhost:9998 应用程序正在运行:http://localhost:9000 每当我到达必须呈现 successRedirect 的地方时,我都会收到以下错误:

XMLHttpRequest cannot load http://localhost:9998/login. The request was redirected to 'http://localhost:9998/', which is disallowed for cross-origin requests that require preflight.

【问题讨论】:

  • /login 是否实现了 HTTP OPTIONS 方法?我相信 CORS 飞行前绝对需要它。
  • 您是否确认您的应用确实返回了所需的标头?如果您对您的应用进行测试OPTIONS 调用,它是否适用于未经身份验证的用户?如果没有,那就是问题所在。
  • 它不适用于未经身份验证的用户。但我目前没有实现 OPTIONS 方法。

标签: angularjs express cors


【解决方案1】:

在大多数浏览器中实现 pre-flight 请求意味着浏览器发出OPTIONS 请求,因此如果站点没有响应这些请求,则请求将失败(另请注意,请求必须是打开的,它可以'不需要身份验证)。

【讨论】:

    猜你喜欢
    • 2018-04-21
    • 2017-06-19
    • 2015-08-25
    • 2016-09-06
    • 2012-12-16
    • 1970-01-01
    • 1970-01-01
    • 2013-12-12
    • 1970-01-01
    相关资源
    最近更新 更多