2016-08-16 77 views
0

我試圖實施護照facebook的戰略到我的應用程序,但我似乎遇到了一些問題。模型創建返回未定義沒有創建 - 風帆JS

我可以成功地調用Facebook並獲得迴應,但是當試圖將用戶保存到我的數據庫時,什麼都不會發生。

在我的代碼下面,我想檢查用戶是否已經存在於數據庫中,如果他們這樣做,返回他們的細節,如果他們不創建一個新的條目。

passport.use(new FacebookStrategy({ 
    clientID: '123', 
    clientSecret: '123', 
    callbackURL: 'http://localhost:1337/auth/facebook/callback', 
    profileFields: ['email'] 
}, 
    function(accessToken, refreshToken, profile, done) { 
    User.findOne({ email: profile.emails[0].value}, function(err, user){ 
     if (err) { return done(err); } 
     if (!user || user == 'false') { 
     console.log('No user found'); 
     console.log(profile.id); 
     User.create({facebookId: profile.id, email: profile.emails[0].value}, function(err, user){ 
      return done(null, user, { message: 'Facebook user created'}); 
     }) 
     } else { 
     console.log(user); 
     return done(null, user, { message: 'User already registered'}); 
     } 
    }) 
    } 
)); 

我可以註銷配置文件ID罰款,以及電子郵件,但User.create語句不運行。

我也有護照本地實施,如果我將數據發佈到我的用戶模型,它創建用戶就好了。

僅供參考,我的用戶模型的樣子:

module.exports = { 

    connection: 'someMongodbServer', 

    attributes: { 
    facebookId: { 
     type: 'integer', 
     unique: true 
    }, 
    email: { 
     type: 'email', 
     required: true, 
     unique: true, 
    }, 
    password: { 
     type: 'string', 
     minLength: 6, 
    }, 
    toJSON: function() { 
     var obj = this.toObject(); 
     delete obj.password; 
     return obj; 
    } 
    }, 
    beforeCreate: function(user, cb) { 
    if(user.password){ 
     bcrypt.genSalt(10, function(err, salt){ 
     bcrypt.hash(user.password, salt, function(err, hash){ 
      if(err) { 
      console.log(err); 
      cb(err) 
      } else { 
      user.password = hash; 
      cb(); 
      } 
     }); 
     }); 
    } 
    } 
}; 

有誰知道在哪裏我可以去錯了嗎?

回答

0

管理解決它,代表我的愚蠢的錯誤。

用戶模型調用beforeCreate函數來散列密碼。正如我在使用Passport的Facebook策略時,Facebook用戶沒有密碼,所以我添加了一條if語句來檢查這一點。

if(user.password){ 

我錯過了這個函數的回調,如果他們不是密碼。用於beforeCreate功能的解決方案是:

beforeCreate: function(user, cb) { 
    if(user.password){ 
     bcrypt.genSalt(10, function(err, salt){ 
     bcrypt.hash(user.password, salt, function(err, hash){ 
      if(err) { 
      console.log(err); 
      cb(err) 
      } else { 
      user.password = hash; 
      cb(); 
      } 
     }); 
     }); 
    } 
    cb(); 
    }