2016-03-12 64 views
3

我正在嘗試將我的應用程序的facebook登錄集成到nodejs,使用passport-facebook模塊的angularjs中。XMLHttpRequest無法加載https://www.facebook.com/dialog/oauth?response_type=code&redirect_uri=

我可以G642.44各級Facebook驗證沒有angularjs,但是當我使用的角度http.get('/auth/facebook') 我收到以下錯誤

XMLHttpRequest cannot load https://www.facebook.com/dialog/oauth?response_type=code&redirect_uri=http%…%2Flocalhost%3A1439%2Fauth%2Ffacebook%2Fcallback&client_id=xxxxxxxx. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:1439' is therefore not allowed access. 
app.js:153 err 

下面是我的角碼

var headers = { 
       'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8', 
       'Content-Type': 'text/html' 
      }; 
    $scope.fblogin=function(){ 
     // $window.location.href='/auth/facebook'; 
     $http({ 
     url:'/auth/facebook', 
     method:'GET', 
     headers: headers 
     }).success(function(data){ 
      console.log(data); 
     }).error(function(){ 
      console.log('err'); 
     }); 
    }; 

pp.config(['$routeProvider','$httpProvider', 
    function($routeProvider,$httpProvider) { 
     $httpProvider.defaults.useXDomain = true; 
     $httpProvider.defaults.headers.common = 'Content-Type: application/json'; 
     delete $httpProvider.defaults.headers.common['X-Requested-With']; 

的NodeJS

app.use(function(req, res, next) { 
    res.header("Access-Control-Allow-Origin", "*"); 
    res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept"); 
    next(); 
}); 

**注:**我試過改變$ http.get()的多個頭部更改

回答

0

您正試圖對URL進行ajax調用,並且由於跨源安全性,瀏覽器拒絕該ajax請求。

這有幾個可能的原因:

  1. 該網址的域名不允許跨起源請求。
  2. 您沒有以正確的方式使請求成功。
  3. 您的請求未正確形成(無論是針對正確的URL還是使用正確的選項發送)。

僅供參考,您設置允許來源標頭的node.js代碼與嘗試向Facebook發送ajax調用的瀏覽器代碼完全無關。該代碼將允許其他人的網站向您的node.js服務器發出跨源請求。


有一點是有點混亂你發佈的是該$http()電話顯示您的網址是不一樣的網址爲您得到錯誤消息,如果你讓我想知道查看錯誤的錯誤代碼。

+0

/AUTH/Facebook是發起url和/ AUTH /實/回調是在標題輸入反應回調 這個/ AUTH /實/回調是重定向URI – Prithvi

+0

@Prithvi - 但是,錯誤消息說:'https:// www.facebook.com/dialog/oauth' – jfriend00

0

解決方案:

鏈接https://www.facebook.com/dialog/oauth?...不適合調用它的AJAX,因爲它必須將用戶重定向至Facebook登錄頁面(所以當你通過AJAX調用它,然後重定向是不可能的)。

反而讓Ajax請求的只是準備在適當的HTML元素:

<a href="https://www.facebook.com/dialog/oauth?..." > ... </>

這工作:)

0

這是我做了什麼,以避免角叫Facebook的身份驗證對話API爲AJAX請求。

使用'window.location="http://localhost:3000/auth/facebook"';角控制器功能從那裏您將請求發送到您的Express服務器包含passport.authenticate東西。

實施例:

$scope.authFacebook = function() { window.location="http://localhost:3000/facebook" } 
相關問題