Хорошо, я довольно новичок в стратегии 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()
Любые идеи о том, что я делаю здесь неправильно?