Estoy tratando de configurar la autenticación de Facebook usando el pasaporte de node.js. Cuando ejecuto la aplicación y voy a /auth/facebook, voy a una página de Facebook para dar permiso a Facebook para devolver mi correo electrónico. Aquí está mi código
Front-end.tsx
<a href='http://localhost:3001/auth/facebook'> <FacebookButton>Signup with Facebook</FacebookButton> </a>
Backend.ts
const { id, secret }: FACEBOOK_APP_SECRET = config.get('Facebook'); const FacebookStrategy = passportFacebook.Strategy; passport.use( new FacebookStrategy( { clientID: id, clientSecret: secret, callbackURL: 'http://localhost:3001/auth/facebook/callback', profileFields: ['id', 'displayName', 'link', 'email'], }, function (accessToken, refreshToken, profile, cb, done) { console.log(profile); console.log(profile.email); userModel.findOne({ facebook: profile.id }, (err: NativeError, existingUser: User) => { if (err) { console.log(err); return done(err); } if (existingUser) { console.log(existingUser); return done(undefined, existingUser); } else { userModel.findOne({ email: profile._json.email }, (err: NativeError, existingEmailUser: User) => { if (err) { console.log(err); return done(err); } if (existingEmailUser) { done(err); } else { const user: any = new userModel(); user.email = profile._json.email; user.facebook = profile.id; user.save((err: Error) => { done(err, user); }); } }); } }); }, ), );
Ruta.ts
this.router.get('/auth/facebook', passport.authenticate('facebook', { scope: ['email', 'public_profile'] })); this.router.get('/auth/facebook/callback', passport.authenticate('facebook', { failureRedirect: '/login' }), function (req, res) { // Successful authentication, redirect home. res.redirect('/'); });
Así que ahora mismo, cuando imprimo el perfil, devolverá lo siguiente
{ access_token: 'xxxxxxxxxxxxxxxxxxx', token_type: 'bearer', expires_in: 5181888 }
y con profile.email , solo devolverá indefinido
Busqué por un tiempo, y otras personas están equivocadas porque no adjuntaron {scope: ['email', 'public_profile'] } en su código, lo cual hice, así que no sé cuál es el problema aquí, ¿por qué puede ¿No devuelvo el correo electrónico en el perfil?