4

我正在使用 Mailgun 节点 machine-pack 发送一封电子邮件,其中包含使用 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 中编码的用户电子邮件和密码。

4

1 回答 1

4

您是否使用虚假数据显示代码?我问是因为 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;
于 2015-10-10T10:42:50.217 回答