2 votes

Code d'erreur AdonisJS "EBADCSRFTOKEN" dans Postman lors d'une opération PUT,POST,DELETE

J'ai créé une API REST dans AdoniJs. Dans cette API, j'ai créé des points de terminaison pour les opérations CRUD avec les méthodes GET, POST, PUT et DELETE. J'utilise shieldjs en tant qu'intergiciel pour vérifier CSRF jeton. J'effectue des appels d'API à partir de Postman.

Tout d'abord, j'appelle la méthode GET de l'API et j'obtiens correctement les données attendues et 3 cookies dans la réponse, dont l'un est le suivant XSRF-TOKEN .

Mais quand j'appelle les méthodes PUT, POST et DELETE en définissant la clé X-XSRF-TOKEN à la valeur de XSRF-TOKEN à partir du cookie dans l'en-tête de la demande, j'obtiens une erreur EBADCSRFTOKEN comme réponse dans Postman.

Configuration de CSRF dans ShieldJS dans shield.js fichier

csrf: {
    enable: true,
    methods: ['POST', 'PUT', 'DELETE'],
    filterUris: [],
    cookieOptions: {
      httpOnly: false,
      sameSite: true,
      path: '/',
      maxAge: 7200
    }
}

Code du gestionnaire d'erreurs dans handler.js fichier

async handle (error, {request, response }) {
    if (error.code === 'EBADCSRFTOKEN') {
        response.forbidden(error.code)
        return
    }
}

Lorsque je change la valeur de enable: false para csrf dans ShieldJs alors ça marche bien mais après avoir fait enable: true Je reçois l'erreur EBADCSRFTOKEN .

Je ne devrais pas avoir ce code d'erreur car j'envoie xsrf jeton.

4voto

Amit Kadivar Points 568

Mettez filtreUris dans votre chemin d'accès comme ceci

csrf: {
    enable: true,
    methods: ['POST', 'PUT', 'DELETE'],
    filterUris: ['/firstroute','*',],
    cookieOptions: {
      httpOnly: false,
      sameSite: true,
      path: '/',
      maxAge: 7200
    }
  }

Pour en savoir plus sur le csrf, consultez ce site web adonisjs


Le deuxième moyen est

  • Créer un projet REST API. Lors de la création de l'API, il n'est pas nécessaire d'avoir une vue. Cette erreur se produit lorsque l'on n'obtient pas de csrftoken. Vous pouvez donc essayer de créer un projet pour la seule API sans inclure de vue comme ceci adonis new projectname --api-only

Plus d'informations sur ce site lien comment créer un projet d'API.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X