User.save () не создает пользователя с паспортом JS Стратегия входа в Facebook - PullRequest
0 голосов
/ 17 марта 2020

Хорошо, я довольно новичок в стратегии Passport, и у меня есть странная проблема, которую я не могу понять. Сначала я создал passportFacebook промежуточное ПО со следующим содержимым:

const passport = require("passport");
const FacebookStrategy = require("passport-facebook").Strategy;
const config = require("config");

const clientId = config.get("facebook_api_key");
const clientSecret = config.get("facebook_api_secret");
const callbackUrl = config.get("facebook_callback_url");

const User = require("../models/User");

passport.serializeUser((user, done) => {
  done(null, user.id);
});

passport.deserializeUser((id, done) => {
  User.findById(id).then(user => {
    done(null, user);
  });
});

passport.use(
  new FacebookStrategy(
    {
      clientID: clientId,
      clientSecret: clientSecret,
      callbackURL: callbackUrl
    },
    (accessToken, refreshToken, profile, done) => {
      if (!profile) {
        return done(null, false);
      }

      User.findOne({ facebookId: profile.id }).then(existingUser => {
        if (existingUser) {
          done(null, existingUser);
        } else {
          new User({
            name: profile.name.givenName,
            surname: profile.name.familyName,
            email: profile.email,
            pictureUrl: profile.profileUrl,
            facebookId: profile.id
          })
            .save()
            .then(user => done(null, user));
        }
      });
    }
  )
);

Затем у меня есть маршруты:

const express = require("express");
const router = express.Router();
const passport = require("passport");

// @route   GET api/auth/facebook
// @desc    Login user via Facebook
// @access  Public
router.get(
  "/facebook",
  passport.authenticate("facebook", {
    scope: ["public_profile", "email"]
  })
);

// @route   GET api/auth/facebook/callback
// @desc    Get a callback from Facebook
// @access  Public
router.get(
  "/facebook/callback",
  passport.authenticate("facebook", {
    successRedirect: "/api/profile/",
    failureRedirect: "/"
  }),
  function(req, res) {
    res.send({ message: "The user is logging in" });
  }
);

// @route   GET api/auth/logout
// @desc    Logout user
// @access  Public
router.get("/logout", (req, res) => {
  res.send({ message: "The user is logged out" });
});

module.exports = router;

При тестировании маршрута в браузере он открывается окно входа в Facebook, и, как только я вошел в систему, перенаправляет меня на страницу обратного вызова.

Однако проблема в том, что когда я просматриваю коллекцию MongoDB, созданный пользователь отсутствует. Ожидаемое поведение будет проверять, если идентификатор не существует и создание пользователя с .save()

Любые идеи о том, что я делаю здесь неправильно?

...