• Jobs
  • About Us
  • professionals
    • Home
    • Jobs
    • Courses and challenges
  • business
    • Home
    • Post vacancy
    • Our process
    • Pricing
    • Assessments
    • Payroll
    • Blog
    • Sales
    • Salary Calculator

0

258
Views
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 3 years ago · Santiago Trujillo
2 answers
Answer question

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 3 years ago · Santiago Trujillo Report

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 3 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Our process Sales
Legal
Terms and conditions Privacy policy
© 2025 PeakU Inc. All Rights Reserved.

Andres GPT

Recommend me some offers
I have an error