0

次のリンクLogin through LinkedIn を使用して、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() を呼び出すと (ここで署名が生成されます)、2 つのパラメーターを渡します。2 番目のパラメーターは 4 つのものを含むオブジェクトです (最初の 2 つはアプリケーション設定で、次の 2 つは最初の要求からのものです。リクエストトークン):

  1. API キー。
  2. API シークレット。
  3. リクエストトークン。
  4. リクエスト トークン シークレット。

4番目のものは私の側にありませんでした。それが問題でした。

また、私はこの OAuth ライブラリを使用しています - http://oauth.googlecode.com/svn/code/javascript/oauth.js、あなたの側のメソッド/関数は完全に異なる名前を持つことができます。しかし、あなたはアイデアを持っています。

お役に立てれば ;)

于 2012-10-18T10:31:24.080 に答える