2013-08-21 3 views
2

Я использую узел с выражением как сервер для моего одностраничного приложения (я использую AngularJS, но это не связано с вопросом). Мне нужно добавить возможности аутентификации с использованием паспортных данных или everyauth. Я не могу использовать другой пакет. Я пробовал много раз, чтобы сделать работу по проверке подлинности на моем одностраничном приложении, но мне не удалось это сделать без обновления страницы. Я ищу способ, чтобы связаться с Facebook и это мой передний конец кода:Использование passportJS или everyauth в одностраничном приложении

function facebookLogin(callback) { 
    FB.login(function (response) { 
     if (!response.authResponse) { 
      console.log('Facebook login failed', response); 
      callback(false, response); 
     } else { 
      console.log('Facebook login complete', response); 
      callback(true, response); 
     } 
    }); 
} 

facebookLogin(function(isConnected, response) { 
    if (isConnected) { 
     // HERE I NEED TO CALL SERVER SIDE AND CONNECT USING PASSPORT OR EVERYAUTH 
     // I WANT TO DO IT WITHOUT PAGE REFRESH 
    } 
}); 

Любая идея, как я могу это сделать? Или где-нибудь с примером? Помните, мне нужно соединить без обновления страницы.

+1

Я ищу аналогичное решение, я предполагаю, что это единственный способ сделать это, используя стратегию переноса (pass-http-bearer), вы попробовали? –

+0

@GuyKorland: Нет .. Что это за пакет? – Naor

+0

это плагин для паспорта, позволяющий аутентификацию на предъявителя. –

ответ

3

Решение, которое я установил, состояло в том, чтобы всплывать в другое окно (например, FB.login), которое вызывает паспорт.js, а затем, когда процесс заканчивается, окно закрывает его, а главное окно контролирует его. (кстати, это очень похоже на FB.login код, но он по-прежнему использовать passport.js легкую интеграцию)

  1. Набор стандартных passport.js

смысл:

app.get('/auth/facebook', passport.authenticate('facebook', { scope:['email']})); 
app.get('/auth/facebook/callback', passport.authenticate('facebook', {failureRedirect:'/'}), successRedirect); 

passport.use(new FacebookStrategy({ 
    clientID: Settings.FB.CLIENT_ID, 
    clientSecret: Settings.FB.CLIENT_SECRET, 
     callbackURL: Settings.FB.CALLBACK_URL 
    },myHandler; 
    } 
)); 

function successRedirect(){ 
    res.send('<html><head><script type="text/javascript">window.close();</script></head></html>'); 
} 
  1. На

сторона клиента:

<a onclick="loginShopetti('/auth/google')"><img src="/imgs/FB-button.png"></a> 

<script> 
function loginShopetti(url){ 
    var win = window.open(url,'popUpWindow','centerscreen=true'); 
    var intervalID = setInterval(function(){ 
     if (win.closed) { 

      //***** DO MY after login code.******** 

      clearInterval(intervalID); 
     } 
    }, 100); 
} 
</script> 
0

Это происходит немного поздно, но у меня была такая же проблема.

Моим решением было использовать Fb.login(), чтобы запросить маркер из браузера без какого-либо перенаправления (только небольшое всплывающее окно FB, если пользователь еще не принял приложение). Затем я делаю еще один запрос к моему серверному приложению (ajax-вызов, поэтому опять не перенаправление), чтобы проверить токен, создать сеанс и т. Д. С помощью passport-facebook-token.

+0

Я могу разработать немного больше, если кто-то мне понадобится: +1: –

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