我正在使用PassportJS和Facebook-Strategy来验证我网站的用户。
当用户未在Facebook弹出窗口中取消选择任何内容时,一切都很顺利。
然而,假设用户取消选择电子邮件,我将不会得到回复,这显然是在用户的控制之下。
我的问题是 - 如何根据我重试的数据将它们引导到“其他地方”?
passport.use(new FacebookStrategy({
clientID: config.facebook.appID,
clientSecret: config.facebook.appSecret,
callbackURL: config.facebook.callbackURL,
profileFields: ['displayName', 'picture.type(large)', 'emails', 'birthday', 'location']},
function(accessToken, refreshToken, profile, done){
var newUser = new userModel({
fullname : profile.displayName,
profilePic : profile.photos[0].value || '',
email : profile.emails[0].value || '',
birthday : profile._json.birthday || '',
location : profile._json.location.name || '',
});
newUser.save(function(err){
done(null, newUser);
});
);
}
当然,我可以做某种预处理器,但如果数据无效,我不知道我需要做什么。例如,说“电子邮件”是必须的。我如何告诉用户:“由于您没有提供强制性电子邮件字段,请填写”然后我将用户带到“配置文件设置”页面。
我在Facebook应用上的回调网址是:
http://localhost:3000/auth/facebook/callback
下面是NodeJS路线:
router.get('/auth/facebook/callback', passport.authenticate('facebook', {
successRedirect:'/wall',
failureRedirect:'/login'
}));
任何输入都会有所帮助。
提前致谢。
答案 0 :(得分:0)
我认为用户不会取消选择电子邮件字段。 Facebook将为您提供您请求的所有用户数据。但是,如果Facebook中提供的用户电子邮件未经过验证,那么您将无法获得该信息
email:profile.emails[0].value
此处,即电子邮件字段将为空。如果您认为该电子邮件是强制性的,那么在每次成功登录后,只需编写代码以检查电子邮件字段是否为空/空。如果它是空的,那么您创建一个表单,您可以要求用户输入他们的电子邮件。
我使用mongodb,护照代码就是这样,
var User = require('../models/user');
passport.use(new FacebookStrategy({
clientID: configAuth.facebookAuth.clientID,
clientSecret: configAuth.facebookAuth.clientSecret,
callbackURL: configAuth.facebookAuth.callbackURL,
profileFields: ['id', 'email', 'first_name', 'last_name'],
},
function(token, refreshToken, profile, done) {
process.nextTick(function() {
User.findOne({ 'facebook.id': profile.id }, function(err, user) {
if (err)
return done(err);
if (user) {
return done(null, user);
} else {
var newUser = new User();
newUser.facebook.id = profile.id;
newUser.facebook.token = token;
newUser.facebook.name = profile.name.givenName + ' ' + profile.name.familyName;
if(profile.emails !=null)
{
newUser.facebook.email = (profile.emails[0].value || '').toLowerCase();
}
else
{
//write your code here to use the form and request the email from the user and then add that email to your database.
}
newUser.save(function(err) {
if (err)
console.log(err);
return done(null, newUser);
});
}
});
});
}));
现在,您不需要更改成功重定向和失败重定向的nodejs路由。