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