我正在尝试在 Google Analytics 上设置目标以跟踪注册,因此我设置了一个“谢谢”页面作为我的 url 目标。当我的用户使用他们的电子邮件地址注册时效果很好,但当他们使用 facebook 注册/登录时效果不佳。当他们登录时,他们会被重定向到感谢页面,因为在使用 Passport JS 和 Node.js 设置 Facebook 时只有一个 url 回调。
这是我的代码:
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' }));
如果用户存在,我想重定向到他们的仪表板 ('/dashboard),如果他们是新用户,我需要将他们重定向到/thankyou。 知道如何实现这一点吗?
非常感谢!
最佳答案
没关系,找到答案了。这是下面更新的代码。注意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);
});
现有用户将被重定向到/dashboard,新用户将被重定向到/dashboard?newu Google Analytics 不需要 2 个不同的 url,它只需要一个查询字符串。当我设置 url 目标时,我选择了以/dashboard?newu 开头的 url。
希望对你有帮助
关于node.js - 使用 PassportJS for Facebook 时如何区分登录和注册,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20897967/