0
我有一个问题,当我尝试通过Facebook登录我的项目应用程序访问Facebook帐户中的数据但返回未定义的字段。我也希望在facebook成功登录后再次提示用户,以获取有关他的CNIC,MOBILE,ADDRESS,AGE,SEMESTER,DateOfAdmission的信息,这些信息当然不可用于用户的Facebook帐户。 这是我的路线调用和护照功能定义。Facebook登录通过Node.js Web应用程序返回用户配置文件中的'未定义'字段作为passport.js认证后的响应
passport.use(的Facebook',新FacebookStrategy({
// pull in our app id and secret from our auth.js file
clientID : configAuth.facebookAuth.clientID,
clientSecret : configAuth.facebookAuth.clientSecret,
callbackURL : configAuth.facebookAuth.callbackURL
},
// facebook will send back the token and profile
function(token, refreshToken, profile, done) {
// asynchronous
process.nextTick(function() {
console.log(profile.email) ;
// find the user in the database based on their facebook id
connection.query("SELECT * FROM student where email = ?", [profile.email], function(err, rows){
if(rows.length){
return done(null, false, req.flash('signupMessage', 'Username/Email Already exist.'));
}
else{
console.log("Profile: ", profile, "\n\n\n") ;
var newUserMysql = {
//id: "cs151071",
username: "cs123456",
password: bcrypt.hashSync("ab123456", null, null), // use the generateHash function in our user model
dateofadmission: "14/05/2016",
email: profile.email,
firstname: profile.firstname,
lastname: profile.lastname,
gender: profile.gender,
cnic: "12345-9876543-1",
address: "Malir",
mobile: "03312589633",
age: 23,
semester: 5
};
console.log(newUserMysql) ;
console.log("username: ", newUserMysql.username, "\n") ;
console.log("password: ", newUserMysql.password, "\n") ;
console.log("dateofadmission: ", newUserMysql.dateofadmission, "\n") ;
console.log("email: ", newUserMysql.email, "\n") ;
console.log("firstname: ", newUserMysql.firstname, "\n") ;
console.log("lastname: ", newUserMysql.lastname, "\n") ;
console.log("gender: ", newUserMysql.gender, "\n") ;
console.log("cnic: ", newUserMysql.cnic, "\n") ;
console.log("address: ", newUserMysql.address, "\n") ;
console.log("mobile: ", newUserMysql.mobile, "\n") ;
console.log("age: ", newUserMysql.age, "\n") ;
console.log("semester: ", newUserMysql.semester, "\n") ;
var insertQuery = "INSERT INTO student (firstname, lastname, username, password, cnic, address, age, cellNumber, dateOfAdmission, gender, email, semester_id) values (?,?,?,?,?,?,?,?,?,?,?,?)";
connection.query(insertQuery, [newUserMysql.firstname, newUserMysql.lastname, newUserMysql.username, newUserMysql.password, newUserMysql.cnic, newUserMysql.address, newUserMysql.age, newUserMysql.mobile, newUserMysql.dateOfAdmission, newUserMysql.gender, newUserMysql.email, newUserMysql.semester], function(err, rows) {
console.log(err) ;
//newUserMysql.id = rows.insertId;
return done(null, newUserMysql);
});
}
})
});
}));
这里是呼叫路由。
app.get('/auth/facebook', passport.authenticate('facebook', { scope: ['email'] }));
// handle the callback after facebook has authenticated the user
app.get('/auth/facebook/callback',
passport.authenticate('facebook', {
successRedirect : '/profile',
failureRedirect : '/signup',
failureFlash: true // allow flash messages });
})
);