/ / Node.js Паспорт Facebook Удостоверяване без връщане на имейл - node.js, mongodb, passport.js, mean-stack, passport-facebook

Node.js Паспорт Facebook Удостоверяване без връщане на имейл - node.js, mongodb, passport.js, mean-stack, passport-facebook

Опитвам се да настроя удостоверяване с Facebookизползва паспорт от node.js. Когато пускам приложението и отивам в / auth / facebook, отивам на страница Facebook, за да дам разрешение Facebook да върне имейла ми. Но след като ударих добре, получих страница (обратно повикване), в която се казва "Няма имейли, свързани с този профил!" Което според кода означава, че profile.emails е null. Какво ми липсва?

Това са предупрежденията, които се появяват, когато стартирам приложението. Не знам дали те пак са проблем.

express-session deprecated undefined resave option; provide resave option auth.js:44:37
express-session deprecated undefined saveUninitialized option; provide saveUninitialized option auth.js:44:37

Тук е кода за оторизация. Ще премина през интрото MEAN стек курс M101X от edx.

function setupAuth(User, app) {
var passport = require("passport");
var FacebookStrategy = require("passport-facebook").Strategy;

// High level serialize/de-serialize configuration for passport
passport.serializeUser(function(user, done) {
done(null, user._id);
});

passport.deserializeUser(function(id, done) {
User.
findOne({ _id : id }).
exec(done);
});

// Facebook-specific
passport.use(new FacebookStrategy(
{
clientID: process.env.FACEBOOK_CLIENT_ID,
clientSecret: process.env.FACEBOOK_CLIENT_SECRET,
callbackURL: "http://localhost:3000/auth/facebook/callback"
},
function(accessToken, refreshToken, profile, done) {
if (!profile.emails || !profile.emails.length) {
return done("No emails associated with this account!");
}

User.findOneAndUpdate(
{ "data.oauth": profile.id },
{
$set: {
"profile.username": profile.emails[0].value,
"profile.picture": "http://graph.facebook.com/" +
profile.id.toString() + "/picture?type=large"
}
},
{ "new": true, upsert: true, runValidators: true },
function(error, user) {
done(error, user);
});
}));

// Express middlewares
app.use(require("express-session")({
secret: "this is a secret"
}));
app.use(passport.initialize());
app.use(passport.session());

// Express routes for auth
app.get("/auth/facebook",
passport.authenticate("facebook", { scope: ["email"] }));

app.get("/auth/facebook/callback",
passport.authenticate("facebook", { failureRedirect: "/fail" }),
function(req, res) {
res.send("Welcome, " + req.user.profile.username);
});
}

module.exports = setupAuth;

Отговори:

1 за отговор № 1

Опитахте ли да добавите profileFields в блока passport.use, както е предложено в раздел "Дискусии" на курса под "Проблем с удостоверяване на Facebook"?