web-dev-qa-db-ja.com

JsonWebTokenに問題があります。 JsonWebTokenエラー:JWTを指定する必要があります

私はVueを使用して最初のSPAプロジェクトを構築しています。

私はバックエンドにNodeJSを使用することにしましたが、JsonWebTokenを使用してログイン機能を作成するのに頭痛がしました。

JWTがどのように機能するかを確認するためにいくつかのコードを書いており、JWTの検証方法を確認しようとすると、サーバーからエラーが返されました。

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

以下は私のserver.jsのコードです

これは、ものをインポートするためのコードです。

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 }));

JWTを発行するためのAPIです。

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});
});

JWTを確認するためのAPIです。

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を指定する必要があります

このエラーは、次のトークンがnullまたは空の場合に発生します。

5

特定のファイルでjwtを定義していないか、nullまたは空である可能性があります。したがって、エラーが発生します。私はあなたのコードをテストするだけで動作します。 jwtトークンをpostリクエストに正しく送信していない可能性があります。

_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'));
});
_

ところで、このようにテストする方法はありませんconst x = jwt.verify(token, 'dsfklgj', function (err, decoded) {Syncの方法で書き込むか、asyncコールバック関数で条件を確認してください。あなたの場合、xundefinedとなり、いつ実行されるかは保証されません。

0
mabc224