Używam standardowej płyty Meanjs.org, a Facebook Signup zwraca mnie na stronę rejestracji. Poniżej przedstawiono kroki, które podjąłem do tej pory.Facebook Login zwraca "Nieokreślone" Pola w profilu użytkownika i nie zwraca wiadomości e-mail. MEANJs + Passport-facebook
1) Konfigurowanie Facebook App Site URL
i oddzwanianie URI OAuth
2) Umieszczenie APP_ID i APP_Secret w jak Klient_ID i Klient_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) Kod jest następujący
--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'));
- funkcja oauthCallback,
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 Strategia
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) Debugowanie
Logging err pod funkcją oauthCallback zwraca następujący,
1TypeError: Cannot read property '0' of undefined
Co Facebook powraca jako profilu w Passport Facebook moduł jest następująca
{ 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 } }
Czy ktoś może być uprzejmy w prowadzeniu mnie w sprawie uzyskania prawidłowego profilu użytkownika z Facebooka, w tym adresu e-mail użytkownika?
Dziękuję bardzo.
Zmiany w API V2.4 dotyczące pól, patrz https://developers.facebook.com/docs/apps/changelog#v2_4_changes // Faktyczne żądanie API musi zostać odpowiednio zmienione; jeśli twój framework/SDK nie ujawnia ci tego żądania, musisz poprosić go o dostosowanie swojego kodu. – CBroe
Sprawdź wersję paszportu-facebooka w płycie podstawowej. Miałem podobną sytuację i aktualizacja do wersji 2.0.0 rozwiązała problem. – dipole