Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

112
Views
Token JWT no establecido en el encabezado de respuesta

Tengo la siguiente función, que autentica a un usuario creando un encabezado de respuesta:

 function authenticateUser(res, id) { const payload = { id } const token = jwt.sign(payload, config.JWT_KEY, { expiresIn: '24h' }) res.set('authorization', token) res.redirect('/user/profile') res.end() }

Sin embargo, cuando redirijo al /usuario/perfil, sale indefinido para el encabezado de autorización:

 controller.checkAuthorizaion = (req, res, next) => { const token = getJWTToken(req) console.log(token); if(!token) Router.redirect(res, '/', 401) else { jwt.verify(token, config.JWT_KEY, (err, data) => { if(err) Router.redirect(res, '/', 401) else { res.userId = data.id next() } }) } }

¿Por qué no funciona? ¿Cómo devuelvo mi token jwt al cliente? Pensé que jwt.sign() lo envía automáticamente.

about 4 years ago · Santiago Trujillo
2 answers
Answer question

0

Si usa jsonwebtoken , debe llamarlo como función async o proporcionar una devolución de llamada:

 async function authenticateUser(res, id) { const payload = { id } const token = await jwt.sign(payload, config.JWT_KEY, { expiresIn: '24h' }) res.set('authorization', token) res.redirect('/user/profile') res.end() }

getJWTToken(req) también debe llamarse async :

 controller.checkAuthorizaion = async (req, res, next) => { const token = await getJWTToken(req) console.log(token);

Y, por supuesto, dentro de getJWTToken : también debe llamar a jwt.verify como una función asíncrona.

about 4 years ago · Santiago Trujillo Report

0

  1. Authorization es un encabezado de solicitud. No debe usarse en las respuestas y creo que la mayoría de los navegadores ignoran este encabezado en la respuesta.

  2. Estás enviando una respuesta de redirección al navegador. El navegador lee esa respuesta y envía una nueva solicitud al punto final /user/profile . El navegador no agrega automáticamente el encabezado Authorization a sus solicitudes.

Si envía la solicitud original como una llamada AJAX, entonces deberá asegurarse de que el cliente que está utilizando (por ejemplo, axios) lea el encabezado de Autorización de la respuesta antes de enviar otra solicitud al punto final al que redirija. No lo he comprobado, pero estoy bastante seguro de que los clientes de JS como axios ignoran el encabezado de Autorización en las respuestas y no lo copiarán automáticamente en otra solicitud.

Aparte de eso, @Anatoly tiene algunos puntos válidos sobre cómo llamar a funciones asíncronas, así que échale un vistazo también.

¿Cómo devuelvo mi token jwt al cliente? Pensé que jwt.sign() lo envía automáticamente.

Normalmente, envía el token en el cuerpo de la respuesta y deja que su cliente lea el cuerpo y almacene el token en algún lugar: en la memoria, almacenamiento local, etc. Otra solución sería almacenar el token en una cookie, pero eso solo funcionará si ya posee el backend al que está llamando con el token. (Si posee el backend, entonces, de hecho, no tiene sentido usar tokens de acceso. Podría usar sesiones HTTP simples y antiguas).

about 4 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 Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!