2015-01-11 127 views
1

我正在嘗試爲我的網站實現第三方身份驗證功能。這是我從網上獲得的「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只是簡單地阻止它。任何人都知道我應該做什麼?

+1

你誤會CORS ....訪問頭必須是在遠程服務器頭。在您的服務器上設置它以向Facebook發送請求不會產生任何效果 – charlietfl

+0

@charlietfl哪臺服務器是遠程服務器?這不是Facebook嗎?因爲據我所知,有三方: 我的網站(一個html/js文件),我的本地服務器(一個js文件)在我的終端上運行,和facebook。 – CoderApprentice

+0

@SQLApprentice:是的,Facebook服務器。 Facebook需要允許您的應用程序在不觸發同源策略的情況下創建XMLHttpRequest。 CORS是Facebook的機制,不適合你。如果Facebook不允許你通過CORS,你不能使用CORS。 – slebetman

回答

5

使用護照登錄Facebook時遇到同樣的錯誤。

我認爲正在發生的事情是,護照發送302重定向回客戶端。但是由於請求發生在XMLHttpRequest上,所以Facebook拒絕來自另一個域的重定向請求。

因此,我訴諸做了window.location.href ='/ auth/facebook'而不是製作XMLHttpRequest。

希望這有助於

P.S:求購發表評論,但沒能因爲我需要一定的最小聲譽

相關問題