Нужно ли мне передавать полезные данные в этот код для генерации токена JWT?
Я хочу использовать JWT для генерации токена для аутентификации пользователей. Когда я использую почтальон для проверки кода с зарегистрированным именем пользователя и паролем, он возвращалJsonWebTokenError: jwt malform
. При внимательном рассмотрении я обнаружил, что ошибка возникает из-заjwt.verify
раздел.
- Нужно ли мне передавать значение полезной нагрузки для создания токена?
- Как я могу настроить его так, чтобы, когда пользователь создает запрос на вход, скажем, он передает свое имя пользователя и пароль, а также адрес электронной почты и пароль, клиент должен передать идентификатор клиента ( [полезная нагрузка + идентификатор клиента]), чтобы сервер знал для кого должен быть подписан токен.
- Есть ли какое-то особое значение, которое мне нужно передать
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.(ЗНАК) ФУНКЦИЮ КАК СЛЕДУЮЩЕЕ
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);
}
});
};
1 ответ
jwt.sign()
вернуть функцию обратного вызова, подобную этой
jwt.sign(payload, expiration, function (error, token) {
if(error) {
// Faild Error
} else {
// Get token and do continue
}
});