node.js - 我是否需要将有效负载传递给此代码以生成 JWT 令牌?
问题描述
我想使用 JWT 生成令牌来验证用户。当我使用 postman 使用注册的用户名和密码测试代码时,它返回了JsonWebTokenError: jwt malform
. 经过仔细审查,我发现错误来自jwt.verify
部分。
- 我是否需要传递有效负载值来生成令牌?
- 我该如何配置它,以便当用户发出登录请求时,说他正在传递他的用户名和密码以及电子邮件和密码,客户端必须传递客户端身份( [payload + clientID] ),以便服务器知道为谁签署令牌。
- 我需要传递任何特殊值
Postman Header
来测试令牌系统的工作吗?
编码
const jwt = require('jsonwebtoken');
const fs = require('fs');
// PRIVATE and PUBLIC key
const publicKey = fs.readFileSync(__dirname + '/public.key', 'utf8');
const privateKey = fs.readFileSync(__dirname + '/private.key', 'utf8');
// Returns secret only known to server at runtime
exports.getSecret = () => {
const secret = require('../config/secret.json').secret;
return secret;
};
// Returns token
exports.getToken = (payload, signOptions) => {
if (!signOptions) {
signOptions = {
issuer: "Myself",
expiresIn: "30d",
algorithm: "RS256"
}
};
const token = jwt.sign(payload, privateKey, options);
return (token);
};
// Returns result of token validation
exports.validateToken = (token, verifyOptions) => {
if (!verifyOptions) {
verifyOptions = {
issuer: "Myself",
expiresIn: "30d",
algorithm: "RS256"
}
};
try {
return jwt.verify(token, publicKey, verifyOptions);
} catch (err) {
return err;
}
};
// Returns validation result of token
exports.token_post = (req, res) => {
res.send(this.validateToken(req.header.Authorization, this.getSecret()));
};
下面代码的其余部分链接到用于验证用户的权限文件。该错误表明参数没有到达this.validateToken
零件。
exports.hasPermission = (token, resource) => {
const result = this.validateToken(token, this.getSecret());
console.log(result);
if (result.name === 'JsonWebTokenError') {
return false;
} else if (result.permissions) {
let permissionSet = new Set(result.permissions);
console.log('permissions in token', JSON.stringify(permissionSet));
return permissionSet.has(resource);
} else {
return false;
}
};
我编辑了 JWT.(SIGN) 功能如下
return jwt.sign(payload, privateKey, signOptions, function (error, token){
if(error) {
return done(new JsonWebTokenError('error in generating token: ' + error.message));
} else {
console.log("Token :" + token);
}
});
};
解决方案
jwt.sign()
返回这样的回调函数
jwt.sign(payload, expiration, function (error, token) {
if(error) {
// Faild Error
} else {
// Get token and do continue
}
});
推荐阅读
- json - 如何从值阻止我将其解析为 JSON 的 JSON 字符串中删除一些键?
- html - 在 span 元素的右边界处开始 svg 折线
- python-3.x - python3 str到字节的转换问题
- mysql - 将 redmine 升级到最新版本并将其移动到最新的 20.04。ubuntu
- microsoft-teams - 受保护的 API 请求批准后,图形 API 列表通道消息返回 UnknownError
- actions-on-google - 自定义操作 - 抱歉,您的语言或国家/地区无法使用或设置 {action name}
- javascript - 使用二进制响应填充输入类型标签
- java - 为什么即使 JUnit4 在我的有效 pom.xml 中也无法识别 JUnit4 导入?
- python-3.x - 将 XML 文件解析为嵌套 DICT
- google-apps-script - 谷歌表单 - 如何在任何给定时间限制一个人访问表单?