Я пытаюсь настроить цели в Google Analytics, чтобы отслеживать оповещения, поэтому я установил страницу «спасибо» как цель моего URL. Он работает хорошо, когда мои пользователи регистрируются с их адресом электронной почты, но не когда они используют facebook для регистрации/входа в систему. Когда они заходят в систему, они перенаправляются на страницу благодарности, поскольку при настройке Facebook используется только один обратный вызов URL, используя Passport JS и Node.Как отличить Логин от Зарегистрироваться при использовании PassportJS для Facebook
Вот мой код:
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' }));
Если пользователь существует, то я хотел бы перенаправить на их приборной панели ('/ приборной панели), и если они являются новыми пользователями, мне нужно перенаправить их к/большое спасибо. Любая идея, как этого достичь?
Большое спасибо!
Если пользователь не существует 'NEWUSER = новый пользователь ({isNewUser: истинно, ...});' и если пользователь существует, мы можем 'uInfo.isNewUser = ложь; done (err, uInfo) ', проверить isNewUser на маршруте позже. – damphat
Спасибо, но я не хотел использовать это, потому что у меня не было прямого доступа к новому пользовательскому объекту в обратном вызове. Я мог бы прочитать базу данных, но мне нужно было бы прочитать и обновить флаг. 2 вызова DB слишком много всего –