护照Facebook整合问题

时间:2016-01-10 07:07:38

标签: passport.js

所以我在将Facebook集成到我的应用程序时遇到了麻烦。

这是我的Facebook身份验证码:

  passport.use('facebook', new FacebookStrategy({

    clientID: passportConfig.FACEBOOK_APP_ID,
    clientSecret: passportConfig.FACEBOOK_APP_SECRET,
    callbackURL: "http://localhost:3000/auth/facebook/callback"

  }, function(accessToken, refreshToken, profile, done) {

    facebookModel.findOne({'facebook.facebookId' : profile.id}, function(err, user) {

      if (err) {
        return done(err);
      }

      if (user) {
        done(null, user);
      }else {
        var facebookUser = new facebookModel();
        facebookUser.facebook.facebookId = profile.id;
        facebookUser.facebook.token = accessToken;
        facebookUser.facebook.name = profile.displayName;
        facebookUser.save(function(error){
          if (error) {
            console.log("Error logging into Facebook.");
          }else {
            done(null, facebookUser);
          }
        });
      }

    });

  }));

这是我的模特:

var mongoose = require('mongoose');
var Schema = mongoose.Schema;

var userSchema = new Schema({
  local : {
    fname : String,
    lname : String,
    username : String,
    email : String,
    password : String
  },
  facebook : {
    facebookId : String,
    token : String,
    name : String
  }
});

module.exports = mongoose.model('User', userSchema);

但是我一直收到错误。

在后端

  • FacebookUser.facebook.facebookId = profile.id;
  • TypeError: Cannot set property 'facebookId' of undefined

但是我确实看到我的个人资料对象有一个id。

在前端

  • GET http://localhost:3000/auth/facebook/callback?code=AQB3NfQB7WP ..... net::ERR_CONNECTION_REFUSED

2 个答案:

答案 0 :(得分:0)

facebookUser.facebook未定义 你需要声明它,样本:

facebookUser.facebook = {}

答案 1 :(得分:0)

实际上我发现我使用错误的模型出了什么问题。

从facebookModel更改为userModel。

解决了问题。