我正在使用Mailgun节点机器包发送一封电子邮件,其中包含一个使用machinepack-jwt创建的JWT的URL。当用户点击生成的电子邮件中的“确认”时,它会点击我想要解码JWT的Sails控制器方法。
我一直在获取一个具有空字符串作为其值的属性的对象。
供参考: 我正在使用node-machine machinepack-jwt进行编码和解码。我试图将问题标记为这样,但此标记不在可用标记中,并且我没有所需的1500个代表点
我的帆控制器:
module.exports = {
//Encode method
signup: function (req, res){
if (!req.param('serviceManager')) {
res.badRequest('Missing required parameter!');
} else {
var Mailgun = require('machinepack-mailgun');
var JWT = require('machinepack-jwt');
var newUser = req.param('serviceManager');
JWT.encode({
secret: 'my_secret',
algorithm: 'my_algo',
expires: 2880, //in minutes(two days)
payload: newUser.email + ':' + newUser.password
}).exec({
error: function (err){
console.log(err);
},
success : function (authToken){
Mailgun.sendHtmlEmail({//my Mailgun send with template that has authToken in it});
//Decode method
confirm_email: function (req, res){
if (!req.params[0]) {
res.badRequest('Missing required parameter!');
} else {
var JWT = require('machinepack-jwt');
var authToken = req.params[0];
console.log(authToken);
JWT.decode({
secret: 'my_secret',
token: authToken,
algorithm: 'my_algo'
}).exec({
error: function (err) {
res.send(err);
},
success: function (decodedToken) {
res.view('emailconfirmed');
console.log(decodedToken);// returns { id: '', email: '', role: '', sessionId: '' }
}
});
}
}
我期待的是我在发送的JWT中编码的用户电子邮件和密码。
答案 0 :(得分:2)
您是否使用虚假数据显示代码?我问,因为JWT中的算法参数值不正确' my_algo'。您只能使用几种算法 - S256,HS384,HS512和RS256
接下来你应该使用这样的代码:
JWT.encode({
secret: 'my_secret',
algorithm: 'HS256',
expires: 2880, //in minutes(two days)
payload: newUser
}).exec({
JWT.decode({
secret: 'my_secret',
token: authToken,
algorithm: 'HS256'
schema:'email, password' // set here properties from payload object
}).exec({
在此库中,您应使用架构参数为数据设置架构 - http://node-machine.org/machinepack-jwt/decode
// -----
var express = require('express');
var path = require('path');
var bodyParser = require('body-parser');
var app = express();
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
app.use(express.static(path.join(__dirname, 'public')));
app.get('/', function (req, res) {
var JWT = require('machinepack-jwt');
var newUser ={
username:'username',
password:'pass'
}
JWT.encode({
secret: 'my_secret',
algorithm: 'HS256',
expires: 2880, //in minutes(two days)
payload: newUser
}).exec({
error: function (err){
console.log(err);
},
success : function (authToken){
JWT.decode({
secret: 'my_secret',
token: authToken,
algorithm: 'HS256',
schema:'username,password'
}).exec({
error: function (err) {
res.send(err);
},
success: function (decodedToken) {
res.send(decodedToken);
}
});
}
});
});
app.listen(3000);
module.exports = app;