Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

262
Vistas
No se establece ninguna cookie de usuario al usar el inicio de sesión de Facebook, Passport, Express, React y Node

Actualmente estoy en el proceso de agregar autenticación a una aplicación React/Redux/Express bastante grande, pero la cookie de usuario nunca se configura.

Estoy usando sesiones de cliente para almacenar la cookie, ya que no tengo intención de crear una base de datos o similar para el almacenamiento (probé una implementación de sesión rápida, pero la tienda predeterminada no debe usarse para entornos de producción).

Por lo que puedo decir, las sesiones de pasaporte + cliente deberían funcionar, siempre que el nombre de la cookie de sesiones de cliente esté configurado como "usuario", pero nunca se almacena nada. Sin embargo, no creo que las sesiones de cliente sean mi problema actual, ya que Passport. SerializeUser nunca se dispara, aunque el inicio de sesión de Facebook regresa con éxito (agrega un gran /?code = cadena muy larga a la URL al regresar).

O simplemente pasé por alto algún detalle, o hay un problema oculto en la configuración de React/Redux que causa esto (por ejemplo, estoy usando React Router para todas mis rutas, excepto las que se mencionan en el ejemplo a continuación).

El botón de inicio de sesión es bastante simple:

 <div><a href="/auth/facebook">Login with Facebook</a></div>

Eliminé la gran mayoría del contenido de mi archivo server.jsx, pero conservé el código relevante:

 /* Lots of other imports .... .... .... */ import express from 'express'; import passport from 'passport'; import strategy from 'passport-facebook'; import sessions from 'client-sessions'; const app = express(); // Facebook strategy passport.use(new strategy.Strategy({ clientID: process.env.CLIENT_ID, clientSecret: process.env.CLIENT_SECRET, callbackURL: 'http://localhost:8081/', passReqToCallback: true }, function(accessToken, refreshToken, profile, cb) { return cb(null, profile); })); // Serialize passport user passport.serializeUser(function(user, cb) { console.log("SERIALIZE"); cb(null, user); }); // Deserialize passport user passport.deserializeUser(function(obj, cb) { console.log("DESERIALIZE"); cb(null, obj); }); // Client-sessions app.use(sessions({ cookieName: 'user', secret: 'thisisjustatest', duration: 24 * 60 * 60 * 1000, activeDuration: 1000 * 60 * 5 })); // Facebook authentication paths app.get('/auth/facebook', passport.authenticate('facebook')); app.get('/auth/facebook/callback', passport.authenticate('facebook', { successRedirect: '/', failureRedirect: '/' })); app.use(passport.initialize()); app.use(passport.session()); app.enable('trust proxy'); app.use((req, res) => { console.log(req); /* A lot of code .... .... .... */ }

¿Algún consejo? Soy consciente de que la estrategia personalizada requiere un inicio de sesión manual para llamar, pero solo estoy usando la estrategia de Facebook, por lo que estoy algo perdido aquí.

Editar: sospecho que podría deberse a cómo se divide la aplicación en front-end (app.js) y back-end (server.js). No estoy seguro de cómo evitarlo sin una reescritura bastante grande.

about 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Parece que olvidé verificar dos veces mis URL. La solución es bastante simple: la URL de devolución de llamada debe coincidir con la devolución de llamada del pasaporte, por lo que en este caso debería ser http://localhost:8081/auth/facebook/callback .

about 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda