2016-01-12 5 views
0

Написание кода для аутентификации пользователей с использованием паспорта, с использованием паспорт-linkedin-oauth2, паспорт-google-oauth2, паспорт-facebook и паспорт-твиттер.Доступ к информации о сеансе в паспорте

ОК, то, что я использую, не так важно, но может быть полезно знать. То, что я пытаюсь сделать, это выяснить простой способ передать переменные во внутренний код, чтобы принимать решения. Так, например. В настоящее время система только делает свою базу децификации по погоде или не работает аутентификация. Если вы заходите на регистрацию или авторизуетесь, и вы нажмете кнопку Google, вы войдете в систему.

Однако я хочу, чтобы код мог определить, что запрос поступает из регистрации (в этом случае a новый пользователь имеет успех, существующий пользователь должен отправить обратно код и сообщение с сообщением «Пользователь уже зарегистрирован»). То же самое с логином. Однако, если «существующий» пользователь имеет явный успех, если вы нажмете «login» и его новый пользователь, он вернет сообщение с сообщением «Пользователь не зарегистрирован», который позволяет переднему концу представить приятную кнопку с надписью «Register пользователь».

Моя проблема в том, что это простой способ передать это на бэкэнд. два пути для вызова в настоящее время являются:

// ===================================== 
// Google ROUTES ===================== 
// ===================================== 
// route for google authentication and login 
router.get('/at/google', passport.authenticate('google', { scope : 'email' })); 

// handle the callback after Google has authenticated the user 
router.get('/cb/google', 
    passport.authenticate('google', { 
     successRedirect : '/', 
     failureRedirect : '/login', 
     failureFlash: true //This is where we send the failed logins 
    })); 

отлично работает, но они называют один и тот же объект, как и я действительно очень ленив, и хочет, чтобы один объект обрабатывать все.

Я устал установку значения сеанса в предыдущей странице (страница регистрации):

router.get('/login', function(req, res) { 
    req.session.passportOpType = "login"; 
    res.render('login.ejs', { title: 'Betchanow - Social betting as it should be' , loginUrl: cfgWebPage.loginUrl, trackingID: cfgWebPage.googleTracking.trackingID, message: req.flash('loginMessage') }); 
}); 

router.get('/signup', function(req, res) { 
    req.session.passportOpType = "signup"; 
    res.render('signup.ejs', { title: 'Betchanow - Social betting as it should be' , loginUrl: cfgWebPage.loginUrl, trackingID: cfgWebPage.googleTracking.trackingID, message: req.flash('signupMessage') }); 
}); 

А потом выбрать, что в конце концов Google паспорта

// ========================================================================= 
// GOOGLE ================================================================== 
// ========================================================================= 
passport.use(new GoogleStrategy({ 

     clientID  : configAuth.googleAuth.clientID, 
     clientSecret : configAuth.googleAuth.clientSecret, 
     callbackURL  : configAuth.googleAuth.callbackURL, 
     passReqToCallback : true 

    }, 
    function(request, accessToken, refreshToken, profile, done) { 

     // make the code asynchronous 
     // User.findOne won't fire until we have all our data back from Google 
     process.nextTick(function(req) { 
      console.log("This is a " + req.session.authtype) 

Однако, значение на данном этапе не определено. Это может быть из-за его обратного вызова.

Невозможно сохранить хранение сеанса. Мой вопрос сейчас, хотя есть. Как это сделать прямолинейно, желательно независимо от того, какой тип паспорта я использую?

ответ

0

ОК, поиск по лучшим поисковым запросам сделал трюк. Using PassportJS, how does one pass additional form fields to the local authentication strategy?

Хитрость заключается в использовании passReqToCallback : true Который я уже сделал, но не знал, что он сделал.

Если вы установите req.session.foo, чтобы сказать «привет», то он будет сохраняться для сеанса. Затем, включив «passReqToCallback», он передаст req в качестве первого входа в функцию (запрос в коде выше). В этот момент вы можете читать request.session.foo.