我正在尝试使 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 内部服务器错误。