我正在嘗試爲我的網站實現第三方身份驗證功能。這是我從網上獲得的「enableCORS」功能。它位於「Server.js」中。我從我的網站發送一個httpGet請求到我的Server.js(我在我的控制檯中使用節點--harmony server.js 3000運行)。這是HTTPGET功能:CORS允許一些GET請求,但不允許Facebook登錄請求
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只是簡單地阻止它。任何人都知道我應該做什麼?
你誤會CORS ....訪問頭必須是在遠程服務器頭。在您的服務器上設置它以向Facebook發送請求不會產生任何效果 – charlietfl
@charlietfl哪臺服務器是遠程服務器?這不是Facebook嗎?因爲據我所知,有三方: 我的網站(一個html/js文件),我的本地服務器(一個js文件)在我的終端上運行,和facebook。 – CoderApprentice
@SQLApprentice:是的,Facebook服務器。 Facebook需要允許您的應用程序在不觸發同源策略的情況下創建XMLHttpRequest。 CORS是Facebook的機制,不適合你。如果Facebook不允許你通過CORS,你不能使用CORS。 – slebetman