【发布时间】:2016-01-20 09:43:18
【问题描述】:
我目前正在实施一个在服务器端使用 express 和 passport 的应用程序。每次用户尝试登录时,都会激活护照身份验证,有两个参数 - successRedirect 和 failureRedirect。
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是否实现了 HTTPOPTIONS方法?我相信 CORS 飞行前绝对需要它。 -
您是否确认您的应用确实返回了所需的标头?如果您对您的应用进行测试
OPTIONS调用,它是否适用于未经身份验证的用户?如果没有,那就是问题所在。 -
它不适用于未经身份验证的用户。但我目前没有实现 OPTIONS 方法。