Cyr*_*ard 7 node.js facebook-javascript-sdk passport.js
我正在尝试在Google Analytics上设置目标以跟踪Sign Ups,因此我设置了一个"谢谢"页面作为我的网址目标.当我的用户使用他们的电子邮件地址注册但是当他们使用Facebook注册/登录时,它很有效.当他们登录时,他们被重定向到感谢页面,因为在使用Passport JS和Node设置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' }));
Run Code Online (Sandbox Code Playgroud)
如果用户存在,我想重定向到他们的仪表板('/ 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);
});
Run Code Online (Sandbox Code Playgroud)
现有用户将被重定向到/ dashboard,新用户将被重定向到/ dashboard?newu Google Analytics不需要2个不同的网址,只需要一个查询字符串.当我设置url目标时,我选择了url start with/dashboard?newu.
希望这可以帮助
| 归档时间: |
|
| 查看次数: |
1383 次 |
| 最近记录: |