2017-08-09 82 views
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 }); 
    }) 
); 

回答

0

使用该字段您的Facebook策略配置,

profileFields: ['id', 'displayName', 'photos', 'email'], 

赞,

new FacebookStrategy({ 
    clientID: FACEBOOK_APP_ID, 
    clientSecret: FACEBOOK_APP_SECRET, 
    callbackURL: "http://localhost:3000/auth/facebook/callback", 
    profileFields: ['id', 'displayName', 'photos', 'email'] 
}), ...) 

您可以参考:https://github.com/jaredhanson/passport-facebook

相关问题