我正在使用Passport-Facebook身份验证.
passport.use(new FacebookStrategy({
clientID: 'CLIENT_ID',
clientSecret: 'CLIENT_SECRET',
callbackURL: "http://www.example.com/auth/facebook/callback"
},
function (accessToken, refreshToken, profile, done) {
process.nextTick(function () {
console.log(profile)
});
}
));
对于一些Facebook帐户,我没有收到email_id,我甚至尝试使用范围变量,如下所示,但我仍然无法获得email_id.
profileUrl:""和ProfileFields:['','']
在我的应用程序中,我按如下方式注册facebook-strategie:但返回的配置文件不包含电子邮件字段....
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));
}));
Run Code Online (Sandbox Code Playgroud)
获得如下:
app.get('/oauth/facebook', passport.authenticate('facebook', {
failureRedirect: '/login',
scope:['email']
}));
Run Code Online (Sandbox Code Playgroud)
(所以我在这里说的使用范围:Passport-facebook没有收到电子邮件)
在FB-Login页面上iam甚至要求提供电子邮件,我确实提供了:

任何帮助都很贴切!
我正在尝试使用passport-facebook为我的应用程序建立登录系统.一切顺利,除了从请求中返回未定义的2个字段.
我将发布我的整个代码用于登录程序,因为我在这里没有看到很多关于它的信息,即使在这个问题上有很多问题.
这是app.js中的配置
var passport = require('passport');
var FacebookStrategy = require('passport-facebook').Strategy;
passport.serializeUser(function(user, done) {
done(null, user.facebookId);
});
passport.deserializeUser(function(id, done) {
routes.findUserById(id, function(err, user) {
done(err, user);
});
});
passport.use(new FacebookStrategy({
clientID: FACEBOOK_APP_ID,
clientSecret: FACEBOOK_APP_SECRET,
callbackURL: FACEBOOK_CALLBACK_URL,
profileFields: ['id', 'displayName', 'link', 'about_me', 'photos', 'email']
},
routes.handleLogin
));
Run Code Online (Sandbox Code Playgroud)
使用护照初始化和会话
app.use(passport.initialize());
app.use(passport.session());
Run Code Online (Sandbox Code Playgroud)
实际请求处理,请注意我使用的是正确的范围
app.get('/auth/facebook', passport.authenticate('facebook', { scope: ['user_about_me', 'email'] }));
app.get('/auth/facebook/callback', passport.authenticate('facebook', { successRedirect: '/', failureRedirect: '/error' }));
Run Code Online (Sandbox Code Playgroud)
这是我在路由器中的用户创建功能
exports.handleLogin = function(accessToken, refreshToken, profile, done) {
db.userCatalog.findOne({ facebookId: profile.id }, function(err, existingUser) { …Run Code Online (Sandbox Code Playgroud)