Получите токен доступа LinkedIn с OAuthSimple в Javascript - PullRequest
2 голосов
/ 31 декабря 2011

Я использую OAuthSimple в Javascript с аутентификацией на основе ПИН-кода (поток OOB).Мы разрабатываем приложение HTML5, которое находится внутри встроенной оболочки мобильного устройства с использованием PhoneGap.Нет ЛЮБОЙ стороны сервера (вообще нет URL), все запросы отправляются с использованием мобильного устройства в качестве прокси.

Пока мне удалось:- Получить запрос токен- Перенаправить пользователя на страницу авторизации- Получил ПИН авторизации

Мне нужен пример кода, который показывает , как получить токен доступа с использованием библиотеки Javascript OAuthSimple .Любая помощь будет оценена.Спасибо!

Ответы [ 2 ]

6 голосов
/ 05 января 2012

Не уверен, что вы тот же человек, который недавно писал на наших форумах (см. Сообщение здесь https://developer.linkedin.com/forum/oauthsimple-request-access-token),, но я ответил с демонстрационным кодом о том, как это сделать с помощью OAuthSimple.

Фактический пример кода можно найти здесь: https://gist.github.com/efc88a38da25ff4e9283

Если вам нужна помощь в использовании, не стесняйтесь обратиться!

-Jeremy

0 голосов
/ 03 апреля 2013

Это создаст пробел, связанный с входом в систему, хотя это всего лишь обходной код, но это работает по крайней мере для меня

    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);
...