Tôi đang sử dụng bản mẫu soạn sẵn Meanjs.org và Đăng ký Facebook sẽ trả lại tôi đến trang Đăng ký. Sau đây là các bước mà tôi đã thực hiện cho đến thời điểm này.Đăng nhập Facebook đang trả về các trường 'Không xác định' trong hồ sơ người dùng và nó không trả lại email. MEANJs + Hộ chiếu-facebook
1) Thiết lập Facebook App URL Site
và gọi lại URI của OAuth
2) Đặt APP_ID và APP_Secret trong như Client_ID và 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) Mã là như sau
--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'));
- Chức năng 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);
};
};
- Hộ chiếu-Facebook Chiến lược
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) Gỡ rối
Logging err dưới chức năng oauthCallback trả về sau,
1TypeError: Cannot read property '0' of undefined
gì Facebook trả về như hồ sơ cá nhân trong hộ chiếu Facebook module được như sau,
{ 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 } }
Bất cứ ai có thể được loại để hướng dẫn tôi về việc nhận được hồ sơ người dùng chính xác từ Facebook bao gồm cả email người dùng?
Cảm ơn bạn rất nhiều.
Thay đổi API v2.4 liên quan đến các trường, xem https://developers.facebook.com/docs/apps/changelog#v2_4_changes // Yêu cầu API thực tế cần được sửa đổi cho phù hợp; nếu khung/SDK của bạn không hiển thị yêu cầu đó cho bạn thì bạn cần yêu cầu họ điều chỉnh mã của họ. – CBroe
Kiểm tra phiên bản hộ chiếu-facebook trong bản mẫu. Tôi đã có một tình huống tương tự và nâng cấp lên phiên bản 2.0.0 đã giải quyết được vấn đề. – dipole