Snažím sa nastaviť autentifikáciu Facebookupomocou pasu z node.js. Keď spustím aplikáciu a prejdem na adresu / auth / facebook, idem na stránku facebook, aby som povolil facebooku, aby mi vrátil e-mail. Ale po tom, čo som zaskočil ok, dostanem stránku (spätné volanie), ktorá hovorí "Žiadne e-maily spojené s týmto účtom!" Ktoré podľa kódu znamená, že profil.semils je null. Čo mi chýba?
Toto sú upozornenia, ktoré sa zobrazia pri spustení aplikácie. Neviem, či sú problémom.
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
Tu je autorizačný kód. Prechádzať intro MEAN stack kurzu M101X od 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;
odpovede:
1 pre odpoveď č. 1Pokúsili ste sa pridať do bloku passport.use profilové profily, ako je navrhnuté v diskusnej karte v časti "Problém s autentifikáciou Facebooku"?