2017-10-04 6 views
0

Je suis tout à fait nouveau pour Node.js, et j'apprends l'authentification avec passeport, dans mon application nœud que j'ai lignes suivantes qui authentifie l'utilisateur avec google et tire un rappel après une authentification réussie,comment envoyer des données de profil d'utilisateur sur la redirection de succès avec passeport?

// send to google to do the authentication 
     app.get('/auth/google', passport.authenticate('google', { scope : ['profile', 'email'] })); 

     // the callback after google has authenticated the user 
     app.get('/auth/oauth/callback',passport.authenticate('google', {successRedirect : 'http://127.0.0.1:1234/testbot',failureRedirect : '/'})); 

i voulez envoyer les données de profil d'utilisateur à la page enregistrée avec successRedirect, comment puis-je faire cela? ma stratégie de passeport pour l'authentification avec Google est comme si

passport.use(new GoogleStrategy({ 
    clientID  : configAuth.googleAuth.clientID, 
    clientSecret : configAuth.googleAuth.clientSecret, 
    callbackURL  : configAuth.googleAuth.callbackURL, 
    passReqToCallback : true // allows us to pass in the req from our route (lets us check if a user is logged in or not) 

}, 
function(req, token, refreshToken, profile, done) { 
    console.log("Its here "); 
    // asynchronous 
    process.nextTick(function() { 

     // check if the user is already logged in 
     if (!req.user) { 

      User.findOne({ 'UserName' : req.body.email }, function(err, user) { 
       if (err) 
        return done(err); 

       if (user) { 

        // if there is a user id already but no token (user was linked at one point and then removed) 
        if (!user.google.token) { 
         user.google.token = token; 
         user.google.name = profile.displayName; 
         user.google.email = (profile.emails[0].value || '').toLowerCase(); // pull the first email 

         user.save(function(err) { 
          if (err) 
           return done(err); 

          return done(null, user); 
         }); 
        } 

        return done(null, user); 
       } else { 
        var newUser   = new User(); 
        newUser.UserName= (profile.emails[0].value || '').toLowerCase(); 
        newUser.google.id = profile.id; 
        newUser.google.token = token; 
        newUser.google.name = profile.displayName; 
        newUser.google.email = (profile.emails[0].value || '').toLowerCase(); // pull the first email 

        newUser.save(function(err) { 
         if (err) 
          return done(err); 

         return done(null, newUser); 
        }); 
       } 
      }); 

     } else { 
      // user already exists and is logged in, we have to link accounts 
      var user    = req.user; // pull the user out of the session 

      user.google.id = profile.id; 
      user.google.token = token; 
      user.google.name = profile.displayName; 
      user.google.email = (profile.emails[0].value || '').toLowerCase(); // pull the first email 

      user.save(function(err) { 
       if (err) 
        return done(err); 

       return done(null, user); 
      }); 

     } 

    }); 

})); 

Répondre

0

Je ne suis pas sûr de ce que la fin avant votre utilisation de mais si son React avec Redux et si vous avez la RSS, vous pouvez preloadState avec l'info req.user en tirant une action de votre serveur. Si vous disposez d'une configuration de session, vous pouvez effectuer une requête get lorsque votre frontal se charge et répond avec les informations utilisateur.