2012-09-11 127 views
0

我試圖通過LinkedIn使用以下鏈接登錄Login through LinkedInPhonegap:通過LinkedIn登錄錯誤,同時獲取訪問令牌

下面是我code`

  var oauth_info = {}; 
      var consumer_key = ""; 
      var shared_secret = ""; 
      var oauth = OAuthSimple(consumer_key, shared_secret); 

      function parse_response(response) { 
       response.replace(new RegExp("([^?=&]+)(=([^&]*))?", "g"), function($0, $1, $2, $3) { oauth_info[$1] = $3; }); 
       console.log("oauth_token1="+oauth_info.oauth_token); 
      } 

      function linkedInLogin() 
      { 

       var url = oauth.sign({action: "GET", path: "https://api.linkedin.com/uas/oauth/requestToken", parameters: {oauth_callback: "http://www.example.com/"}}).signed_url; 
       console.log("url==="+url); 
       $.ajax(
         { 
         url:url, 
         data: {}, 
         success: function(data){ 
         console.log("inside success"); 
         console.log("response==="+data); 
         parse_response(data); 
         console.log("oauth_token2="+oauth_info.oauth_token); 
         var params = data; 
         params = params.split('&'); 
         for (var i = 0; i < params.length; i++) { 
         var y = params[i].split('='); 
         if(y[0] === 'oauth_token') { 
         localStorage.oauth_token = y[1]; 
         console.log("oauth_token=="+localStorage.oauth_token); 
         } 
         if(y[0]==='oauth_token_secret') 
         { 
         localStorage.oauth_token_secret=y[1]; 
         console.log("oauth_token_secret=="+localStorage.oauth_token_secret); 
         } 
         } 

         step2(); 
         }, 
         error: function(error) { 
         console.log("error"); 
         client_browser.close(); 
         }, 
         dataType: 'text', 
         type: 'GET' 
         });      
      } 
      function step2() 
      { 

       var authoriseurl='https://www.linkedin.com/uas/oauth/authenticate?oauth_token='+oauth_info.oauth_token+'';      
       window.plugins.childBrowser.showWebPage(authoriseurl); 
       window.plugins.childBrowser.onLocationChange = function(loc){ 
        console.log("on loc changed"); 
        linkedInChanged(loc); 
       }; 

      } 

      function linkedInChanged(loc) 
      { 
       console.log("inside loc changed"); 
       if (loc.indexOf("http://www.example.com/") > -1) { 
        window.plugins.childBrowser.close(); 
        console.log("oauth_token3="+oauth_info.oauth_token); 
        var index, verifier = '';    
        var params = loc.substr(loc.indexOf('?') + 1); 
        params = params.split('&'); 
        for (var i = 0; i < params.length; i++) { 
         var y = params[i].split('='); 
         if(y[0] === 'oauth_verifier') { 
          verifier = y[1]; 
          console.log("verifier===="+verifier); 
         } 

        } 
        var acces_url= access_token_url(verifier); 
        oauth.reset(); 
        console.log("oauth_token4="+oauth_info.oauth_token); 
        //console.log("oauth_info"+oauth_info[0][0]+"===="+oauth_info[0][1]); 
        //var url = oauth.sign({action: "GET", path: "https://api.linkedin.com/uas/oauth/accessToken", parameters: {oauth_verifier: verifier}, signatures: oauth_info}).signed_url; 
        console.log("access _url="+acces_url); 

        $.ajax(
          { 
          url:acces_url, 
          data: {}, 
          success: function(data){ 
          console.log("inside access token success"); 
         console.log("response==="+data); 
          var params = data; 
          params = params.split('&'); 
          for (var i = 0; i < params.length; i++) { 
          var y = params[i].split('='); 
          if(y[0] === 'oauth_token') { 
          localStorage.linkedIn_access_Token = y[1]; 
          console.log("linkedIn_access_Token=="+localStorage.linkedIn_access_Token); 
          } 
          if(y[0]==='oauth_token_secret') 
          { 
          localStorage.linkedIn_access_secret=y[1]; 
          console.log("linkedIn_access_secret=="+localStorage.linkedIn_access_secret); 
          } 
          } 
          }, 
         error: function(error){ 
          console.log("error=="+error.responseText); 
          }, 
          dataType: 'text', 
          type: 'GET' 
          }); 



       } 
      } 


      function get_url_vars_from_string(url) { 
       var vars = [], hash; 
       var hashes = url.slice(url.indexOf('?') + 1).split('&'); 
       for(var i = 0; i < hashes.length; i++) 
       { 
        hash = hashes[i].split('='); 
        vars.push(hash[0]); 
        vars[hash[0]] = hash[1]; 
       } 
       return vars; 

      } 

      function access_token_url(pin) { 
       oauth.reset(); 
       //alert(oauth_info.oauth_token); 
       var url = oauth.sign({action: "GET", path: "https://api.linkedin.com/uas/oauth/accessToken", parameters: {oauth_verifier: pin}, signatures: oauth_info}).signed_url; 
       // alert("url="+url); 

       return url; 
      } 

` 按鈕上的linkedInLogin方法被調用的點擊。 我不能擺脫這個code.The Ajax調用在錯誤oauth_problem訪問令牌結果的訪問令牌= token_rejected

請幫

回答

0

我有同樣的問題,並發現了其中的問題來從。

所以,我已經到了accessToken的請求,並且必須生成簽名。當我調用OAuth.completeRequest() - 這是簽名生成的地方 - 我傳遞兩個參數,第二個是包含四件事情的對象(前兩個是應用程序設置,接下來的兩個來自我的第一個請求,請求令牌):

  1. api密鑰。
  2. api的祕密。
  3. 請求令牌。
  4. 請求令牌密碼。

第四個在我的結尾失蹤了。這是問題所在。

此外 - 我正在使用這個OAuth庫 - http://oauth.googlecode.com/svn/code/javascript/oauth.js,所以您的方法/函數可能會有完全不同的名稱。但你有想法。

希望這有助於;)

相關問題