1

我正在尝试使 facebook 登录成为可能:

这是我的 API 路线:

router.post('/registerFb', function(req, res, next){
  User.find({ 'username': req.body.username}, function(err, foundUser){
    if(err)
      return next(err);

    var co = Object.keys(foundUser).length;

    if (co === 0)
    {
      var user = new User();

      user.username = req.body.username;
      user.firstname = "firstname";
      user.lastname = "lastname";
      user.difficulty = "easy";
      user.isstudent = false;
      user.haschildren = false;
      user.gender = "male";
      user.isdoingchallenges =  false;
      user.facebookid = req.body.facebookid;

      user.save(function (err){
        if(err){ return next(err); }

        return res.json({token: user.generateJWT()});
      });
    }else{
      return res.json({token: foundUser.generateJWT()});
    }
  });
});

当用户第一次使用 facebook 登录时,会存储用户并使用 jsonwebtoken 生成令牌。

但是,当该 fb 帐户中已有用户时,它会给我错误:

TypeError: foundUser.generateJWT 不是函数

为什么会这样?generateJWT 对新用户有效,但对找到的用户无效?

我编辑了我的 API 路由:

if (co === 0)
    {
      var user = new User();

      user.username = req.body.username;
      user.firstname = "firstname";
      user.lastname = "lastname";
      user.difficulty = "easy";
      user.isstudent = false;
      user.haschildren = false;
      user.gender = "male";
      user.isdoingchallenges =  false;
      user.facebookid = req.body.facebookid;

      user.save(function (err){
        if(err){ return next(err); }

        return res.json({token: user.generateJWT()});
      });
    }else{
      var user = new User();
      user._id = foundUser._id;
      user.username = foundUser.username;
      return res.json({token: user.generateJWT()});
    }

在邮递员中使用时,它会返回一个符合预期的令牌。

但是当我在生产模式下使用它时,我得到一个 500 内部服务器错误。

4

1 回答 1

0

userUserwhilefoundUser的一个实例,是方法返回的对象User.find

您可能需要修改find方法以返回实例,或者如果它是 db(mongo?)处理程序,请在调用方法之前在回调中User创建实例。UsergenerateJWT

于 2015-11-17T11:43:52.797 回答