私は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 内部サーバー エラーが発生します。