0

我正在尝试使用以下链接Login through LinkedIn 来实现 Login through LinkedIn

下面是我的代码`

            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 方法。我无法从此代码中获取访问令牌。访问令牌的 ajax 调用导致错误 oauth_problem=token_rejected

请帮忙

4

1 回答 1

0

我遇到了同样的问题,并发现问题出在哪里。

所以,我来请求accessToken,并且必须生成签名。当我调用 OAuth.completeRequest() - 这是生成签名的地方 - 我传递了两个参数,第二个是一个包含四个东西的对象(前两个是应用程序设置,接下来两个来自我的第一个请求,对于请求令牌):

  1. api 密钥。
  2. api 的秘密。
  3. 请求令牌。
  4. 请求令牌秘密。

第四个在我这边丢失了。这就是问题所在。

另外 - 我正在使用这个 OAuth 库 - http://oauth.googlecode.com/svn/code/javascript/oauth.js,所以你端的方法/函数可能有完全不同的名称。但你有这个想法。

希望这可以帮助 ;)

于 2012-10-18T10:31:24.080 回答