Ich benutze Meanjs.org Boilerplate und Facebook Signup bringt mich auf die Anmeldeseite. Im Folgenden sind die Schritte, die ich bisher unternommen habe.Facebook Login gibt 'Undefined' Felder im Benutzerprofil zurück und gibt keine E-Mail zurück. MEANJs + Pass-facebook
1) die Facebook-App Site URL einrichten
und den Rückruf URI von OAuth
2) Platzierung der APP_ID und APP_Secret in als Client_ID und Client_Secret
facebook: {
clientID: process.env.FACEBOOK_ID || '*****',
clientSecret: process.env.FACEBOOK_SECRET || '*****',
callbackURL: 'http://localhost:3000/auth/facebook/callback',
profileFields: ['id','emails', 'first_name', 'last_name', 'displayName', 'link', 'about_me', 'photos' ]
},
3)-Code ist wie folgt
--Routes
// Setting the facebook oauth routes
app.route('/auth/facebook').get(passport.authenticate('facebook', {
scope: ['email']
}));
app.route('/auth/facebook/callback').get(users.oauthCallback('facebook'));
- Die oauthCallback Funktion,
exports.oauthCallback = function(strategy) {
return function(req, res, next) {
passport.authenticate(strategy, function(err, user, redirectURL) {
if (err || !user) {
console.log('1' + err);
//console.log(user);
return res.redirect('/#!/signin');
}
req.login(user, function(err) {
if (err) {
console.log('2' + err);
return res.redirect('/#!/signin');
}
return res.redirect(redirectURL || '/');
});
})(req, res, next);
};
};
- Passport-Facebook-Strategie
module.exports = function() {
// Use facebook strategy
passport.use(new FacebookStrategy({
clientID: config.facebook.clientID,
clientSecret: config.facebook.clientSecret,
callbackURL: config.facebook.callbackURL,
passReqToCallback: true
},
function(req, accessToken, refreshToken, profile, done) {
console.log('facebook Strategy Started');
// Set the provider data and include tokens
var providerData = profile._json;
providerData.accessToken = accessToken;
providerData.refreshToken = refreshToken;
// console.log(JSON.stringify(profile));
console.log(profile);
// console.log(JSON.stringify(profile.name.givenName));
// Create the user OAuth profile
var providerUserProfile = {
firstName: profile.name.givenName,
lastName: profile.name.familyName,
displayName: profile.displayName,
email: profile.emails[0].value,
username: profile.username,
provider: 'facebook',
providerIdentifierField: 'id',
providerData: providerData
};
//console.log('provider' + providerUserProfile);
// Save the user OAuth profile
users.saveOAuthUserProfile(req, providerUserProfile, done);
}
));
};
4) Debuggen
Logging err unter oauthCallback Funktion Folgende liefert,
1TypeError: Cannot read property '0' of undefined
Was Book als Profil zurück in Passbook-Modul ist wie folgt,
{ id: 'Id_of_the_person', username: undefined, displayName: 'Full_name_of_person', name: { familyName: undefined, givenName: undefined, middleName: undefined }, gender: undefined, profileUrl: undefined, provider: 'facebook', _raw: '{"name":"Full_name_of_person","id":"Id_of_the_person"}', _json: { name: 'Id_of_the_person', id: 'Id_of_the_person', accessToken: 'access_token_value', refreshToken: undefined } }
Kann jemand freundlich sein, mich zu führen, um das korrekte Benutzerprofil von Facebook einschließlich Benutzeremail zu erhalten?
Vielen Dank.
API v2.4 Änderungen in Bezug auf Felder, siehe https://developers.facebook.com/docs/apps/changelog#v2_4_changes // Die tatsächliche API-Anfrage muss entsprechend geändert werden; Wenn Ihr Framework/SDK diese Anfrage nicht für Sie verfügbar macht, müssen Sie sie bitten, ihren Code anzupassen. – CBroe
Überprüfen Sie die Version von Reisepass-Facebook im Textbaustein. Ich hatte eine ähnliche Situation und ein Upgrade auf Version 2.0.0 löste das Problem. – dipole