web-dev-qa-db-fra.com

Avoir des problèmes avec JsonWebToken; Erreur JsonWebToken: JWT doit être fourni

Je construis mon premier projet SPA avec Vue.

J'ai décidé d'aller avec NodeJS pour le back-end, cependant, j'ai mal à la tête en construisant la fonction de connexion avec JsonWebToken.

J'avais écrit quelques codes pour voir comment fonctionne JWT et quand j'ai essayé de voir comment JWT était vérifié, le serveur m'a donné une erreur.

JsonWebTokenError: jwt must be provided
at Object.module.exports [as verify] (c:\dir\node_modules\jsonwebtoken\verify.js:39:17)
at c:\projects\practice\demo\back\server.js:34:17

Voici le code de mon server.js

C'est le code pour importer les trucs.

const express = require('express');
const jwt = require('jsonwebtoken');
const bodyParser = require('body-parser');
const api = express();

api.use(bodyParser.json());
api.use(bodyParser.urlencoded({ extended: true }));

Il s'agit de l'API pour l'émission de JWT.

api.post('/secure', function (req, res) {
const token = jwt.sign({ user: {id:1, name:'ME!', role: 'average'} }, 'dsfklgj');
console.log(token);
res.json({jwt: token});
});

Il s'agit de l'API pour vérifier JWT.

api.post('/check/post', function (req, res) {
const token = req.body.jwt;
const x = jwt.verify(token, 'dsfklgj', function (err, decoded) {
if (err) throw err;
console.log(decoded);
});
if (x != true) {
res.json({ auth: false });
}else {
res.json({ auth: true });
}
});
5
HelloWorld

jwt doit être fourni

Cette erreur se produit lorsque le jeton à venir est nul ou vide.

5

Il se peut que vous n'ayez pas défini jwt dans un fichier spécifique ou qu'il soit nul ou vide. Vous obtenez donc une erreur. Je viens de tester votre code et cela fonctionne pour moi. Il se peut que vous n'envoyiez pas correctement le jeton jwt dans la demande de publication.

const express = require('express');
const jwt = require('jsonwebtoken');
const bodyParser = require('body-parser');
const http = require('http');
const api = express();

api.use(bodyParser.json());
api.use(bodyParser.urlencoded({ extended: true }));

api.post('/secure', function(req, res) {
    const token = jwt.sign({ user: { id: 1, name: 'ME!', role: 'average' } }, 'dsfklgj');
    console.log(token);
    res.json({ jwt: token });
});


api.post('/check/post', function(req, res) {
    const token = req.body.jwt;
    console.log('token: ' + token);
    const x = jwt.verify(token, 'dsfklgj', function(err, decoded) {
        if (err) throw err;
        console.log(decoded);
    });
    console.log(x);
    if (x != true) {
        res.json({ auth: false });
    } else {
        res.json({ auth: true });
    }
});

api.set('port', 3000);
var server = http.createServer(api);
server.listen(api.get('port'), function() {
    console.log("Express server listening on port " + api.get('port'));
});

BTW il n'y a aucun moyen de le tester comme ça const x = jwt.verify(token, 'dsfklgj', function (err, decoded) {. Soit l'écrire de manière Sync ou vérifier la condition dans la fonction de rappel async. Dans votre cas, x sera undefined et aucune garantie quant à son exécution.

0
mabc224