【问题标题】:Get LinkedIn Access Token with OAuthSimple in Javascript在 Javascript 中使用 OAuthSimple 获取 LinkedIn 访问令牌
【发布时间】:2012-01-31 03:15:36
【问题描述】:

我在 Javascript 中使用 OAuthSimple基于 PIN 的身份验证(OOB 流程)。 我们正在开发一个 HTML5 应用程序,它使用 PhoneGap 存在于移动设备的本机包装器中。没有任何服务器端(根本没有 URL),所有请求都使用移动设备作为代理发送。

到目前为止,我设法:
- 获取请求令牌
- 将用户重定向到授权页面
- 获得授权 PIN

我需要显示如何使用 OAuthSimple Javascript 库获取访问令牌的示例代码。
任何帮助将不胜感激。谢谢!

【问题讨论】:

    标签: javascript oauth linkedin access-token


    【解决方案1】:

    不确定您是不是最近在我们论坛上发帖的人(请参阅此处的帖子 https://developer.linkedin.com/forum/oauthsimple-request-access-token),但我回复了演示代码,说明如何使用 OAuthSimple 做到这一点。

    实际的示例代码可以在这里找到:https://gist.github.com/efc88a38da25ff4e9283

    如果您在使用它时需要任何帮助,请随时与我们联系!

    -杰里米

    【讨论】:

    • 是的,是我! :D 我也打算在 LinkedIn 的论坛上添加对主题的引用!再次感谢杰里米! :)
    • 你能把正确的完整javascript代码移植到这里吗?
    • “OAuthSimple.js”包含什么?你还没有分享它的代码。您能告诉我如何获得该访问代码吗?我能够获得身份验证代码,即使 mu 重定向 URI 与身份验证调用相同,我仍然收到错误。请帮忙。 https://stackoverflow.com/questions/29804501/linkedin-oauth2-authorization-code-error我也面临同样的问题
    【解决方案2】:

    这将创建一个 phonegap linkedIn 登录,虽然它只是一个工作过的代码,但这至少对我有用

        var consumer_key = "key";
        var shared_secret = "secrete";
        self.oauth = OAuthSimple(consumer_key, shared_secret);  var linkedInScope = 'r_basicprofile r_emailaddress w_messages r_network';
        var url = self.oauth.sign({action: "GET", path: "https://api.linkedin.com/uas/oauth/requestToken", parameters: {scope: linkedInScope, oauth_callback: "oob"}}).signed_url;
        var request = 'requestToken';
        var linkedInObj = new Object;
        function linkedInWorkAround(url,request,data){
            var callType = 'GET';
            var xhr = $.ajax({
                url         : url,
                beforeSend  : function(){
                    $.mobile.loading( 'show' );
                    if(request == 'linkedIn_login'){
                        callType = 'POST';
                    }
                },
                timeout     : 8000,
                data        : data,
                type        : callType,
                success: function(r){
                    $.mobile.loading( 'hide' );
                    if(request == 'requestToken'){
                        var oauthRes = r.split('&');
                        $.each(oauthRes, function(k,v){
                            var resObj = v.split('=')
                            linkedInObj[resObj[0]] = resObj[1];
                        });
                        url = 'https://www.linkedin.com/uas/oauth/authenticate?scope='+linkedInScope+'&oauth_token='+linkedInObj.oauth_token;
                        request = 'oauth_token';
                        linkedInWorkAround(url,request);
                    }
                    else if(request == 'oauth_token'){
                        var accessCode = $(r).find('.access-code');
                        if(accessCode.size()){
                            self.oauth.reset();
                            var pin = $(r).find('.access-code').text();
                            url = self.oauth.sign({action: "GET", path: "https://api.linkedin.com/uas/oauth/accessToken", parameters: {scope: linkedInScope, oauth_verifier: pin}, signatures: linkedInObj}).signed_url;
                            request = 'accessToken';
                            linkedInWorkAround(url,request);
                        }
                        else{
    
                            $('.custom-linkedIn').remove();
                            var cloneIn = $(r).find('form').addClass('custom-linkedIn').clone();
                            $('a,span,select,.duration-label,.access',cloneIn).hide();
                            $('#pageLinkedIn .errMsgHolder').after(cloneIn)
    
                            $('#session_key-oauthAuthorizeForm').textinput();
                            $('#session_password-oauthAuthorizeForm').textinput();
                            $('input[type=submit]').button();
                            $('form.custom-linkedIn').submit(function(){
                                $('.errMsgHolder').hide().text('');
                                url = 'https://www.linkedin.com/uas/oauth/authorize/submit';
                                request = 'linkedIn_login';
                                var data = $(this).serialize();
                                linkedInWorkAround(url,request,data);
                                return false;
                            });
                        }
                    }
                    else if(request == 'linkedIn_login'){
                        self.oauth.reset();
                        var pin = $(r).find('.access-code').text();
                        url = self.oauth.sign({action: "GET", path: "https://api.linkedin.com/uas/oauth/accessToken", parameters: {scope: linkedInScope, oauth_verifier: pin}, signatures: linkedInObj}).signed_url;
                        request = 'accessToken';
                        linkedInWorkAround(url,request);
                    }
                    else if(request == 'accessToken'){
                        var oauthRes = r.split('&');
                        self.oauth.reset(); 
                        $.each(oauthRes, function(k,v){
                            var resObj = v.split('=')
                            linkedInObj[resObj[0]] = resObj[1];
                        });
                        url = self.oauth.sign({action: "GET", path: "https://api.linkedin.com/v1/people/~/email-address", signatures: linkedInObj}).signed_url;
                        request = 'getResultLinkedIn';
                        linkedInWorkAround(url,request);
                    }
                    else if(request == 'getResultLinkedIn'){
                        $('body').css({opacity:0});
                        var userLIemail = ($('#session_key-oauthAuthorizeForm').size()) ? $('#session_key-oauthAuthorizeForm').val() : $(r).text();
    
                    }
                },
                error : function(a,b,c){
                    alert('err')
                    console.log(a,b,c)
                    self._cs(a)
                    $.mobile.loading( 'hide' );
                    if(a.statusText.toLowerCase() == 'unauthorized'){
                        $('.errMsgHolder').show().text('The email address or password you provided does not match our records');
                    }
                }
            })
        }
        linkedInWorkAround(url,request);
    

    【讨论】:

      猜你喜欢
      • 2015-10-11
      • 2017-01-07
      • 1970-01-01
      • 2012-02-01
      • 1970-01-01
      • 2018-09-26
      • 1970-01-01
      • 2012-04-09
      • 2020-11-06
      相关资源
      最近更新 更多