问题
In my application i register the facebook-strategie as follows: But the returned profile does not contain the email-field....
passport.use(new FacebookStrategy({
clientID: config.facebook.clientID,
clientSecret: config.facebook.clientSecret,
callbackURL: config.facebook.callbackURL,
passReqToCallback: true
},
function(req, accessToken, refreshToken, profile, done) {
// No email in the following colsole.log
console.log(JSON.stringify(profile));
}));
The get is as follows:
app.get('/oauth/facebook', passport.authenticate('facebook', {
failureRedirect: '/login',
scope:['email']
}));
(So i am using scope as said here: Passport-facebook doesn't get email)
On the FB-Login Page iam even asked for the email and i do provide it:
Any help is very appriciated!
回答1:
From Facebook graph APIv2.4, we need to explicitly specify fields to get.
Introducing Graph API v2.4
So, we can write like:
passport.use(new FacebookStrategy({
clientID: config.facebook.clientID,
clientSecret: config.facebook.clientSecret,
callbackURL: config.facebook.callbackURL,
profileFields: ['id', 'email', 'gender', 'link', 'locale', 'name', 'timezone', 'updated_time', 'verified'],
},
回答2:
You do have the callback part of the code, right?:
app.get('/oauth/facebook/callback', passport.authenticate('facebook', {
failureRedirect: '/login',
successRedirect: '/',
scope:['email']
}));
And, yes, indeed, this should be done with the scope:['email']
, as per instructions from your link and this one here also.
回答3:
You need to specify the scope: "email". Refer the below code.
Facebook authentication route:
// auth facebook
router.get("/auth/facebook", passport.authenticate("facebook", {
scope: "email"
}));
and while configuring the FacebookStrategy, you need to also specify the profileFields.
passport.use(new FacebookStrategy({
callbackURL: "http://localhost:5000/auth/facebook/redirect",
clientID: keys.facebook.clientID,
clientSecret: keys.facebook.clientSecret,
profileFields: ['id', 'displayName', 'photos', 'email', 'gender', 'name']
}, (accessToken, refreshToken, profile, done) => {
// logic
}))
来源:https://stackoverflow.com/questions/31279066/passport-facebook-not-providing-email-even-if-it-is-in-scope