2015-07-11 64 views
0

我被困在某個時刻。我想打到linkedin API(不使用任何軟件包)並獲取用戶的配置文件信息。使用流星JS撞擊LinkedIn API

所以爲此,我按照以下步驟操作: 1.打開linkedin API獲取授權碼 2.使用此授權碼獲取訪問令牌。 3.使用訪問令牌來獲取個人資料信息。

到目前爲止,我能夠獲得授權碼,但無法進一步處理。這裏是我的代碼:

這些只是爲了測試目的,所以在客戶端做所有事情。

我的模板

<template name="home"> 
    <a href="#" class="callLinkedIn">get profile from linkedin</a> 
</template> 

我的助手

var clientId='XXXXX'; 
var secret = 'XXXXX'; 
var redirectUri = 'http%3A%2F%2Flocalhost%3A4000%2F_oauth%2Flinkedin%3Fclose'; 
var credentialToken = "RANDOMSTRING"; 


Template.home.events({ 
    'click .callLinkedIn':function(event,template){ 
     var scope = []; 
     var loginUrl = 
      'https://www.linkedin.com/uas/oauth2/authorization' + 
      '?response_type=code' + '&client_id=' + clientId + 
      '&redirect_uri=' + redirectUri + 
      '&scope=' + scope + '&state=' + credentialToken; 

     showPopup(loginUrl,function(err){ 
      if(err){ 
       console.log(err); 
      } 
      else{ 
       console.log('success'); 
       var params = { 
        'grant_type':'authorization_code', 
        'code':Session.get('code'), 
        'redirect_uri':redirectUri, 
        'client_id':clientId, 
        'client_secret':secret 
       }; 

       HTTP.call('POST',"https://www.linkedin.com/uas/oauth2/accessToken", { 
         headers:{'Content-Type':'application/x-www-form-urlencoded'}, 
         params:params 
        }, 
        function(err,res){ 
         if(err){ 
          console.log(err); 
         } 
         else{ 
          console.log(res); 
         } 
        }); 
      } 
     }) 

    } 
}) 

function showPopup(url, callback, dimensions) {              
    var popup = openCenteredPopup(              
     url,                    
     (dimensions && dimensions.width) || 650,           
     (dimensions && dimensions.height) || 331           
    );                     

    var checkPopupOpen = setInterval(function() {           
     try {                    
      var popupClosed = popup.closed || popup.closed === undefined;     
     } catch (e) {                  
      return;                  
     }                     

     if (popupClosed) { 
      console.log(popup.document.URL); 
      var url = popup.document.URL; 
      var a1 = url.split('code='); 
      var a2 =a1[1].split('&'); 
      Session.set('code',a2[0]); 
      clearInterval(checkPopupOpen);            
      callback();                 
     }                    
    }, 50);                    
} 

function openCenteredPopup(url, width, height) {         
    var screenX = typeof window.screenX !== 'undefined'       
     ? window.screenX : window.screenLeft;          
    var screenY = typeof window.screenY !== 'undefined'       
     ? window.screenY : window.screenTop;          
    var outerWidth = typeof window.outerWidth !== 'undefined'      
     ? window.outerWidth : document.body.clientWidth;       
    var outerHeight = typeof window.outerHeight !== 'undefined'     
     ? window.outerHeight : (document.body.clientHeight - 22);        
    var left = screenX + (outerWidth - width)/2;        
    var top = screenY + (outerHeight - height)/2;        
    var features = ('width=' + width + ',height=' + height +      
    ',left=' + left + ',top=' + top + ',scrollbars=yes');     

    var newwindow = window.open(url, 'Login', features);     
    if (newwindow.focus)             
     newwindow.focus();            
    return newwindow;              
} 

我得到的彈出與LinkedIn的用戶名和密碼。但是當我提供憑據並按「允許訪問」時,我在瀏覽器控制檯中收到此錯誤。

POST https://www.linkedin.com/uas/oauth2/accessToken XMLHttpRequest無法加載https://www.linkedin.com/uas/oauth2/accessToken。請求的資源上沒有「Access-Control-Allow-Origin」標題。因此不允許訪問Origin'http:// localhost:4000'。響應有HTTP狀態代碼400

以及在服務器上,我得到這個 無法從OAuth的查詢解析狀態:由於錯誤說沒有標頭叫'Access-Control-Allow-Origin',嘗試添加DC8ÄDF

回答

0

好,

釷是非常令人費解的。因爲我的代碼沒有錯誤。但最後我發現問題出在linkedin應用程序。我在6個月前創建的應用程序使用了上述代碼。但是,當我嘗試使用新創建的應用程序。

1

頭像這樣:

HTTP.call('POST', 
    "https://www.linkedin.com/uas/oauth2/accessToken", { 
    headers : { 
     'Content-Type':'application/x-www-form-urlencoded', 
     'Access-Control-Allow-Origin' : '*' 
    }, 
    params : params 
    }, 
    function(err,res){ 
    if(err){ 
     console.log(err); 
    } 
    else{ 
     console.log(res); 
    } 
    }); 

嘗試,讓我們知道,如果它的工作原理

+0

嗨,我試過..仍然是給出相同的解決方案。我真的很想知道問題是什麼。任何想法,授權代碼持續多久?我在某個地方讀了20多年,但我沒有在linkedin文檔中看到它。是否因爲我的授權碼過期?但是我在創建它的那一刻起就調用它 – Juvenik

+0

在修復頭文件後,您會收到完全相同的錯誤消息?我認爲認證碼不是問題。 – FullStack

+0

是的,我在控制檯中得到相同的錯誤。你可以在你的系統中嘗試上面的代碼,並在控制檯中看到它。 – Juvenik