在使用PassportJS for Facebook时如何区分login和注册

我正尝试在Google Analytics上设定目标以跟踪Sign Ups,因此我build立了一个“谢谢”页面作为我的url目标。 当我的用户使用他们的电子邮件地址注册时,它运行良好,但是当他们使用Facebook注册/login时不行。 当他们login时,他们被redirect到谢谢页面,因为使用Passport JS和Node设置Facebook时只有一个urlcallback。

这是我的代码:

passport.serializeUser(function(user, done) { done(null, user); }); passport.deserializeUser(function(id, done) { UserActivity.findOne(id,'uid ref', function (err, user) { done(err, user); }); }); passport.use(new FacebookStrategy({ clientID: 'XXXXXXXXXXXX', clientSecret: 'XXXXXXXXXXXXXXXX', callbackURL: "https://www.xxxxxxx.com/auth/facebook/callback" }, function(accessToken, refreshToken, profile, done) { //console.log(profile); User.findOne({ uid: profile.id }, function(err, uInfo) { if(err) console.log('Error: '+err); else{ //User exists: we are done if(uInfo){ done(err, uInfo); } else{ //User doesn't exist: we create a new one var newUser = new User ({ uid: profile.id, email:profile.emails[0].value, ref: 'Facebook' }); // Saving it to the database. newUser.save(function (err,uInfo) { if (err) console.log ('Error on save!'); done(err, uInfo); }); } } }) } )); app.get('/auth/facebook', passport.authenticate('facebook',{ scope: 'email' })); app.get('/auth/facebook/callback', passport.authenticate('facebook', { successRedirect: '/thankyou', failureRedirect: '/login' })); 

如果用户存在,我想redirect到他们的仪表板(“/仪表板),如果他们是新用户,我需要redirect到/谢谢你。 任何想法如何实现这一目标?

非常感谢!

       

网上收集的解决方案 "在使用PassportJS for Facebook时如何区分login和注册"

没关系,find答案。 以下是更新后的代码。 注意使用passReqToCallback和req.session.newu

 passport.use(new FacebookStrategy( { clientID: 'XXX', clientSecret: 'XXX', callbackURL: "https://www.XXX.co/auth/facebook/callback", passReqToCallback: true }, function(req, accessToken, refreshToken, profile, done) { //console.log(profile); User.findOne({ uid: profile.id }, function(err, uInfo) { if(err) console.log('Error: '+err); else{ if(uInfo){ done(err, uInfo); } else{ var newUser = new User ({ uid: profile.id, email:profile.emails[0].value, ref: 'Facebook' }); // Saving it to the database. newUser.save(function (err,uInfo) { if (err) console.log ('Error on save!'); req.session.newu=true; done(err, uInfo); }); } } }) } )); app.get('/auth/facebook', passport.authenticate('facebook',{ scope: 'email' })); app.get('/auth/facebook/callback',function(req, res, next) { passport.authenticate('facebook', function(err, user, info) { if (err) { return next(err); } if (!user) { return res.redirect('/login'); } req.logIn(user, function(err) { if (err) { return next(err); } var redLink = '/dashboard'; if(req.session.newu)redLink = '/dashboard?newu' return res.redirect(redLink); }); })(req, res, next); }); 

现有的用户将被redirect到/仪表板,并将新的用户redirect到/仪表板?Google Analytics不需要2个不同的URL,它只需要一个查询string。 当我设置url目标时,我select了以/ dashboard?newu开头的url。

希望这可以帮助