Mongoose User.findOne既不返回错误也不成功

时间:2018-01-22 13:58:16

标签: node.js mongodb mongoose passport.js passport-facebook

在passport-facebook策略中,当我使用Mongoose User.findOne()查询时,它不会返回错误或成功对象。 Nodejs来到这个块时,逃避这个块User.findOne(){...}而没有给出任何错误和成功,即等待逃避。

passport.use(new FacebookStrategy({
        clientID: config.get('facebook.clientID'),
        clientSecret: config.get('facebook.clientSecret'),
        callbackURL: config.get('facebook.callbackURL'),
        passReqToCallback: true,
        profileFields: ['id', 'email', 'first_name', 'last_name']
    },
    function(req, accessToken, refreshToken, profile, done) {
        // check if the user is already logged in
        let fbInfo = profile._json;
        // console.log(fbInfo);

        if (!req.user) {
            User.findOne({ 'email': fbInfo.email }, function(err, user) {
                if (err)
                    return done(err);

                if (user) {

1 个答案:

答案 0 :(得分:0)

我认为你不会在if语句中使用它。 将if (!req.user)更改为if (req.user),它应该有效。

-

但是,这里有一些使用Passport Facebook身份验证策略的示例代码:

passport.use(new FacebookStrategy({
    clientID: oauth.facebook.clientID,
    clientSecret: oauth.facebook.clientSecret,
    callbackURL: oauth.facebook.callbackURL,
    // passReqToCallback: true,
    profileFields: ['id', 'emails', 'name']
},
function (accessToken, refreshToken, profile, done) {
      process.nextTick(function () {
        User.findOne({
          $or: [
            { 'facebook.id': profile.id },
            { 'email': profile.emails[0].value }
          ]
        }, function (err, user) {
          if (err) {
            return done(err)
          }

          if (user) {
            if (user.facebook.id == undefined) {
              user.facebook.id = profile.id
              user.facebook.token = accessToken
              user.facebook.email = profile.emails[0].value
              user.facebook.name = profile.name.givenName + ' ' + profile.name.familyName
              user.save()
            }

            return done(null, user)
          } else {
            let newUser = new User()
            ...

            newUser.save(err => {
              if (err) {
                console.log(err)
                throw err
              }

              return done(null, newUser)
            })
          }
        })
      })
    }
  ))