gpt4 book ai didi

javascript - CORS 允许一些 GET 请求,但不允许 Facebook 登录请求

转载 作者:行者123 更新时间:2023-11-30 08:39:35 25 4
gpt4 key购买 nike

我目前正在尝试为我的网站实现第三方身份验证功能。这是我从网上获得的“enableCORS”功能。它位于“Server.js”中。

var enableCORS = 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, Authorization, Content-Length, X-Requested-With');

if ('OPTIONS' == req.method) {
res.send(200);
}
else {
next();
}
};


var express = require("Express");
var url = require("url");
var http = require("http");
var app;


var port = process.argv[2];
app = express();
http.createServer(app).listen(port);

app.use(enableCORS)

我从我的网站向我的 Server.js(我使用 node --harmony server.js 3000 在我的控制台中运行)发送了一个 httpGet 请求。这是 httpGet 函数:

function httpGet(URL) {
var xmlHttp = null;
xmlHttp = new XMLHttpRequest();
xmlHttp.open("GET", URL, false);
xmlHttp.send(null);

return xmlHttp.response;
}

我自己发送的请求是:

var items = JSON.parse(httpGet("http://localhost:3000/items"));

这工作正常,我的控制台显示 GET 请求成功,代码为 200。这有效的唯一原因是因为我使用了“enableCORS”函数。

现在我想创建一个登录功能,第三方身份验证,使用 Facebook。为此,我找到了这段代码:

var passport = require('passport')
, FacebookStrategy = require('passport-facebook').Strategy;

passport.use(new FacebookStrategy({
clientID: FACEBOOK_APP_ID,
clientSecret: FACEBOOK_APP_SECRET,
callbackURL: "http://www.example.com/auth/facebook/callback"
},

function(accessToken, refreshToken, profile, done) {
User.findOrCreate(..., function(err, user) {
if (err) { return done(err); }
done(null, user);
});
}
));

app.get('/auth/facebook', passport.authenticate('facebook'));
app.get('/auth/facebook/callback',
passport.authenticate('facebook', { successRedirect: '/',
failureRedirect: '/login' }));

但是,当我发送以下请求时:

httpGet("http://localhost:3000/auth/facebook");

我收到相同的 CORS 错误。该错误告诉我启用 CORS 或将发送方和接收方放在同一域中。因为我显然不能让 Facebook 进入我自己的域,所以我必须启用 CORS。但是,正如您在上面看到的,我已经启用了 CORS。我也在Facebook的Developers部分申请并填写了我自己的App ID和App Secret,所以不会出错。它实际上使用我的 ID 和 App Secret 将请求发送到 Facebook/Oauth,但 CORS 只是阻止了它。是什么导致了这个错误?

最佳答案

使用 passport 登录 facebook 时遇到同样的错误。

我认为正在发生的事情是,passport 将 302 重定向发送回客户端。但由于请求是通过 XMLHttpRequest 发生的,Facebook 拒绝重定向请求,因为它来自另一个域。

因此,我求助于 window.location.href = '/auth/facebook' 而不是创建 XMLHttpRequest。

希望对你有帮助

P.S: 想发表评论但不能,因为我需要一定的最低声誉

关于javascript - CORS 允许一些 GET 请求,但不允许 Facebook 登录请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27893286/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com