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

557
Views
Strapi 4 extiende la función de inicio de sesión auth.callback para dar 405 rutas

Estoy tratando de agregar un token de actualización a la función de inicio de sesión de strapi 4 cuando inicio sesión como usuario. He seguido este tutorial, que se realiza en v3. Enlace tutorial

Estoy usando las extensiones de Strapi 4 y modifiqué el archivo strapi-server.js en ==> src/extensions/users-permissions/strapi-server.js

Como se explica en el tutorial, copio/pego todas las funciones del controlador que se encuentran aquí (solo probé la devolución de llamada por el momento) strapi github repo

Cambié alguna ruta para que funcione el requerimiento, y la devolución de llamada funciona como antes cuando el usuario inicia sesión, y también obtengo mi versión de token 'tkv' y la identificación del token de actualización como en el tutorial.

Tengo 1 pregunta y 1 problema.

  1. ¿Hay alguna manera de evitar la duplicación de estas funciones básicas? Solo quiero agregar un token de actualización al resultado final.

  2. He creado dos nuevas rutas para actualizar y revocar el token como se explica. Pero, incluso si doy las autorizaciones en el backend de strapi, sigo recibiendo un método "405" no permitido cuando llamo al punto final.

Algo que no entiendo es que en el archivo predeterminado de strapi-server.js, tenemos un código de demostración para la ruta.

 // Original demo code in the existing strapi-server.js plugin.policies[newPolicy] = (ctx) => {}; plugin.routes.push({ method: 'GET', path: '/route-path', handler: 'controller.action', });

Si presiono las nuevas rutas usando el ejemplo, aparece un error que dice que plugin.routes... no es una función

Si cambio las rutas así, las rutas se agregan correctamente:

 plugin.routes['content-api'].routes.push({ method: 'POST', path: '/auth/refreshToken', handler: 'auth.refreshToken', },{ method: 'POST', path: '/auth/revokeToken', handler: 'auth.revokeToken', })

Aquí, agrego mis rutas al backend, pero cuando miro los roles y permisos del backend de strapi, la ruta del punto final de los métodos es "/api/users-permissions/auth/refreshToken" o "/api/users-permissions/auth/ revocar token". No entiendo por qué se agrega el controlador.

Si llamo a estos puntos finales, obtengo un error 400. Si llamo a estos puntos finales eliminando los "permisos de usuarios" en la ruta del punto final, obtengo un 405.

No sé a dónde mirar, para corregir esto para obtener mis fichas. Gracias a todos por su ayuda.

Saludos,

Fabien

about 4 years ago · Juan Pablo Isaza
1 answers
Answer question

0

  1. No estoy seguro, pero parece que las funciones principales deben replicarse

  2. Código de trabajo para mí de la siguiente manera

 plugin.controllers.auth['refreshToken'] = async (ctx) => { const params = _.assign(ctx.request.body); // Params should consist of: // * token - string - jwt refresh token // * renew - boolean - if true, also return an updated refresh token. // Parse Token try { // Unpack refresh token const {tkv, iat, exp, sub} = await strapi.plugins["users-permissions"].services.jwt.verify(params.token); // Check if refresh token has expired if (Date.now() / 1000 > exp) return ctx.badRequest(null, "Expired refresh token"); // fetch user based on subject const user = await strapi.query('plugin::users-permissions.user').findOne({where:{ id: sub }}); // Check here if user token version is the same as in refresh token // This will ensure that the refresh token hasn't been made invalid by a password change or similar. if (tkv !== user.tokenVersion) return ctx.badRequest(null, "Refresh token is invalid"); // Otherwise we are good to go. ctx.send({ jwt: strapi.plugins["users-permissions"].services.jwt.issue({ id: user.id, }), refresh: params.renew ? generateRefreshToken(user) : null }); } catch (e) { return ctx.badRequest(null, "Invalid token"); } } plugin.controllers.auth['revoke'] = async (ctx) => { const params = _.assign(ctx.request.body); const userService = getService('user'); // Params should consist of: // * token - string - jwt refresh token // Parse Token try { // Unpack refresh token const {tkv, iat, exp, sub} = await strapi.plugins["users-permissions"].services.jwt.verify(params.token); // Check if refresh token has expired if (Date.now() / 1000 > exp) return ctx.badRequest(null, "Expired refresh token"); // fetch user based on subject const user = await strapi.query('plugin::users-permissions.user').findOne({where:{ id: sub }}); // Check here if user token version is the same as in refresh token // This will ensure that the refresh token hasn't been made invalid by a password change or similar. if (tkv !== user.tokenVersion) return ctx.badRequest(null, "Refresh token is invalid"); // Update the user. const tokenVersion = user.tokenVersion + 1; await userService.edit(sub, { tokenVersion: tokenVersion }); ctx.send({ confirmed: true, }); } catch (e) { return ctx.badRequest(null, "Invalid token"); } } plugin.routes['content-api'].routes.push({ "method": "POST", "path": "/auth/refreshToken", "handler": "auth.refreshToken", "config": { "policies": [], "prefix": "" } }); plugin.routes['content-api'].routes.push({ "method": "POST", "path": "/auth/revoke", "handler": "auth.revoke", "config": { "policies": [], "prefix": "" } });

Llamar a /api/auth/refreshToken y /api/auth/revoke funciona bien después

about 4 years ago · Juan Pablo Isaza 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!