私のアプリケーションでは、次のようにfacebook-strategieを登録します。しかし、返されたプロファイルには、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));
}));
取得は次のとおりです。
app.get('/oauth/facebook', passport.authenticate('facebook', {
failureRedirect: '/login',
scope:['email']
}));
(だから私はここで言ったようにスコープを使用しています: パスポート-Facebookは電子メールを受け取りません )
FB-ログインページで、iamは電子メールを要求しました、そして私はそれを提供します:
どんな助けでも非常に感謝しています!
FacebookグラフAPIv2.4から、取得するフィールドを明示的に指定する必要があります。
したがって、次のように書くことができます。
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'],
},
コードのコールバック部分はありますか?:
app.get('/oauth/facebook/callback', passport.authenticate('facebook', {
failureRedirect: '/login',
successRedirect: '/',
scope:['email']
}));
そして、はい、確かに、これはあなたのリンクとこれからの指示に従ってscope:['email']
で行われるべきです ここでも 。
スコープを指定する必要があります: "email"。以下のコードを参照してください。
Facebook認証ルート:
// auth facebook
router.get("/auth/facebook", passport.authenticate("facebook", {
scope: "email"
}));
facebookStrategyを構成するときに、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
}))