Опитвам се да настроя удостоверяване с 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"?