JsonWebToken 遇到问题; JsonWebToken 错误:必须提供 JWT
Posted
技术标签:
【中文标题】JsonWebToken 遇到问题; JsonWebToken 错误:必须提供 JWT【英文标题】:Having trouble with JsonWebToken; JsonWebToken Error: JWT must be provided 【发布时间】:2018-07-06 16:39:55 【问题描述】:我正在使用 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 );
);
【问题讨论】:
返回什么:const token = req.body.jwt;
IE,console.log(token)
给出了什么?
应该是收到的JWT token。后者将显示它收到的令牌。
【参考方案1】:
必须提供jwt
当即将到来的令牌为空或为空时会发生此错误。
【讨论】:
它为空或为空的常见原因是什么? @Esqarrouth,当客户出于任何原因没有发送它时。 来晚了,但是对我来说,出现了这个错误,因为令牌丢失了,这是因为用户未经身份验证【参考方案2】:可能是您没有在特定文件中定义jwt
,或者它为空或空。因此你得到一个错误。我只是测试你的代码,它对我有用。可能是您没有将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
回调函数中检查条件。在您的情况下,x
将是 undefined
,并且无法保证它何时会运行。
【讨论】:
我设法解决了它:我将请求发送为“jwt”:“token”。当我发送 jwt:"token" 时,它工作正常。感谢您的宝贵时间。以上是关于JsonWebToken 遇到问题; JsonWebToken 错误:必须提供 JWT的主要内容,如果未能解决你的问题,请参考以下文章
远程调用接口修改某个单位jsonwe文件读取后转为bean对象
远程调用接口修改某个单位jsonwe文件读取后转为bean对象
远程调用接口修改某个单位jsonwe文件读取后转为bean对象