2012-09-11 2 views
0

다음 링크를 사용하여 LinkedIn을 통해 로그인을 구현하려고합니다. Login through LinkedIn .Phonegap : 액세스 토큰을 가져 오는 중 LinkedIn을 통한 로그인

는 아래 linkedInLogin 메서드를 호출 버튼의 클릭에 내 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; 
      } 

` 입니다. 나는 문제가 오는 곳 저도 같은 문제가 있었는데, 발견

답변

0

도와주세요 = 오류 oauth_problem에 액세스 토큰 결과이 code.The 아약스 호출의 액세스 토큰을 얻을 수 아니에요

을 token_rejected 에서.

그래서 저는 accessToken에 대한 요청에 와서 서명을 생성해야합니다. OAuth.completeRequest()를 호출하면 서명이 생성됩니다. 두 개의 매개 변수를 전달하고 두 번째 매개 변수는 네 가지를 포함하는 객체입니다. 첫 번째 두 개는 응용 프로그램 설정이며 다음 두 개는 첫 번째 요청의 요청 토큰) :

  1. api 키.
  2. API 비밀.
  3. 요청 토큰.
  4. 요청 토큰 비밀.

네 번째는 내 끝에 없습니다. 그것이 문제였습니다.

또한 -이 OAuth 라이브러리 - http://oauth.googlecode.com/svn/code/javascript/oauth.js을 사용 중이므로 마지막에있는 메소드/함수가 완전히 다른 이름을 가질 수 있습니다. 그러나 당신은 그 생각을 가지고 있습니다.

희망이 도움이된다;)

관련 문제