2015-07-09 2 views
-2

Я работаю над Meteor, пытающимся реализовать linkedin oauth. У меня есть кнопка, когда пользователь нажимает на нее, появляется окно с просьбой разрешить доступ пользователю, когда пользователь разрешает, должна отображаться информация профиля пользователя.Linkedin Интеграция с Meteor

Мой подход.

Когда кнопка нажата, я впрыскивание этого

"window.open('https://www.linkedin.com/uas/oauth2/authorization?response_type=code&client_id=XXXXXXX&redirect_uri=http%3A%2F%2Flocalhost%3A4000%2F_oauth%2Flinkedin%3Fclose&scope=&state=XXXXX', 'newwindow', 'width=400, height=250');" 

, который открывает новое окно, которое запрашивает разрешение на доступ. И когда пользователь разрешает доступ, указывая имя пользователя и пароль, окно немедленно отключается. Я знаю, что linkedin направляет его в наше приложение, дающее код авторизации и состояние в URL-адресе. И мне нужно использовать этот код авторизации, чтобы получить токен доступа. Но я не могу поймать этот код авторизации.

Пожалуйста, дайте мне знать, как я могу достичь этой функциональности, и если мой подход верен.

ответ

0

Это ответ всем, кто голосовал по этому вопросу. Я, наконец, смог это сделать.

Session.set('authCode',null); 
Session.set('profile',null); 
Template.home.events({ 
    'click .viewLinkedinProfileButton' :function(event, template){ 
     var redirect_uri = encodeURIComponent(Meteor.absoluteUrl('userAuthComplete')); 
     var client_id='XXXXXXX'; 
     var state = 'myRandomString'; 
     var scope = ['r_basicprofile']; 
     var url = "https://www.linkedin.com/uas/oauth2/authorization?response_type=code&client_id="+client_id+"&redirect_uri="+redirect_uri+"&state="+state+"&scope=r_basicprofile"; 

     showPopup(url,function(err){ 
      if(err){ 
       console.log("Cancelled "+err); 
      } 
      else{ 
       Meteor.call('getAccessToken',Session.get('authCode'),function(err,res){ 
        if(res){ 
         console.log(res); 
         Session.set('profile',res); 
        } 
       }); 
       Session.set('authCode',null); 
      } 
     }) 
    } 
}); 

function showPopup(url, callback, dimensions) { 
    // default dimensions that worked well for facebook and google 
    var popup = openCenteredPopup(
     url, 
     (dimensions && dimensions.width) || 650, 
     (dimensions && dimensions.height) || 331 
    ); 

    var checkPopupOpen = setInterval(function() { 
     try { 
      var popupClosed = popup.closed || popup.closed === undefined; 
     } catch (e) { 
      return; 
     } 

     if (popupClosed) { 
      var url = popup.document.URL; 
      if(url.toLowerCase().indexOf('code') !== -1){ 
       var array1 = url.split('code='); 
       var array2 =array1[1].split('&'); 
       Session.set('authCode',array2[0]); 
       clearInterval(checkPopupOpen); 
       callback(); 
      } 
      else{ 
       clearInterval(checkPopupOpen); 
      } 
     } 
    }, 50); 
} 

function openCenteredPopup(url, width, height) { 
    var screenX = typeof window.screenX !== 'undefined' 
     ? window.screenX : window.screenLeft; 
    var screenY = typeof window.screenY !== 'undefined' 
     ? window.screenY : window.screenTop; 
    var outerWidth = typeof window.outerWidth !== 'undefined' 
     ? window.outerWidth : document.body.clientWidth; 
    var outerHeight = typeof window.outerHeight !== 'undefined' 
     ? window.outerHeight : (document.body.clientHeight - 22); 
    var left = screenX + (outerWidth - width)/2; 
    var top = screenY + (outerHeight - height)/2; 
    var features = ('width=' + width + ',height=' + height + 
    ',left=' + left + ',top=' + top + ',scrollbars=yes'); 

    var newwindow = window.open(url, 'Login', features); 
    if (newwindow.focus) 
     newwindow.focus(); 
    return newwindow; 
} 


Template.home.helpers({ 
    profile:function(){ 
     return Session.get('profile'); 
    } 
}); 
0

Используйте пакет счетов-LinkedIn, чтобы сделать это: https://atmospherejs.com/pauli/accounts-linkedin

Вы можете добавить его: meteor add accounts-linkedin

В качестве альтернативы, посмотрите на исходный код для этого пакета, если вы действительно хотите знать, как это делается ,

+0

нет, мой друг, я попробовал все эти пакеты. – Juvenik

+0

Спасибо за -1. Лол. Отлично, чтобы прийти сюда и ответить на ваш вопрос, чтобы проголосовать. В прошлом это работало для меня. И имеет загрузок в 8,3 тыс., Так что, может быть, проблема с тобой –

+0

Я не проголосовал, а дура. Я только что создал свою учетную запись SO и имею только 2 репутации, поэтому не могу проголосовать за любой вопрос. – Juvenik

Смежные вопросы