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

301
Vistas
Cómo pasar un parámetro adicional a pasaporte.autenticar

(Ya hago fbStrategy.passReqToCallback = true ) Estoy copiando https://scotch.io/tutorials/easy-node-authentication-linking-all-accounts-together pero quiero usar este servicio de autenticación social para múltiples aplicaciones, ej. : el que controla el sistema de calefacción, el que enciende los aspersores, etc.

Básicamente, si una de estas aplicaciones verifica con el servidor y no tiene un token correcto, se redirige a este servicio de autenticación social (social-auth). Cuando el usuario presiona los botones de inicio de sesión social, toma el parámetro de qué aplicación proviene y lo agrega como parámetro para /auth/facebook/:appid

 // send to facebook to do the authentication app.get('/auth/facebook/:appId', function(req,res,next){ passport.authenticate( 'facebook', { scope : 'email' } )(req,res,next); });

req of req,res,next es el registro de usuario serializado. En este punto, social-auth no sabe quién es el usuario.

 fbStrategy.passReqToCallback = true; passport.use(new FacebookStrategy(fbStrategy, function(req, token, refreshToken, profile, done) { var email = (profile.emails[0].value || '').toLowerCase() process.nextTick(function() {...

Una vez que se completa la autorización, quiero redirigir de nuevo a la aplicación de llamada y necesito el :appId para continuar y poder volver al sitio correcto.

Ahora, en general, funcionaría si solo hiciera que una variable como currentAppId accesible para las diversas estrategias sociales, pero si tiene varias personas que se autentican al mismo tiempo, es posible que un usuario regrese a la aplicación incorrecta o alguna otra aplicación de usuarios. Es por eso que necesito appId para viajar como parámetro para passport.authenticate . ¿Dónde debo mirar para averiguar cómo? ¿Podría envolver passport.authenticate . autenticar o modificar las cosas de otra manera?

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

0

Puede usar la solicitud en sí para transferir algunos parámetros adicionales desde y hacia la función de estrategia. En el siguiente ejemplo, los dos parámetros _toParam y _fromParam se utilizan para este problema.

 app.get('/auth/facebook/:appId', function(req,res,next){ req._toParam = 'Hello'; passport.authenticate( 'facebook', { scope : 'email' } )(req,res,next); }) fbStrategy.passReqToCallback = true; passport.use(new FacebookStrategy(fbStrategy, function(req, token, refreshToken, profile, done) { console.log(req._toParam); req._fromParam = 'Hello 2'; var email = (profile.emails[0].value || '').toLowerCase() process.nextTick(function() {...

Si necesita almacenar la identificación para futuras solicitudes, puede usar un mapa con el socket de la solicitud actual como clave.

about 4 years ago · Santiago Trujillo Denunciar

0

En mi caso, debido al flujo de autenticación, configurar una variable en req no funcionaba.

La segunda opción, establecer passReqToCallBack: true me estaba dando muchos problemas, por lo que tampoco era una opción. Puede encontrar más información aquí .

La solución me llegó después de la respuesta que Dhiraj publicó en el hilo anterior, configuré una sola cadena en el state y pude usar la cadena en las devoluciones de llamada.

 login: (req, res, next) => passport.authenticate('google', { scope: ['profile', 'email'], state: req.query.username }, () => next())(req, res, next), onSuccess: async(req, res) => { console.log(req.query.state) },

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