放置jwt.sign代码时出现JWT错误

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了放置jwt.sign代码时出现JWT错误相关的知识,希望对你有一定的参考价值。

我正在努力创建一个身份验证系统,并试图弄清楚如何使用JWT。我正在使用Node,express,passport和mysql。我尝试在db.sync()方法之后创建“var token”,但这只会引发错误,但如果我在db.sync()之前放入“var token”,它会起作用吗?我应该这样做吗?提前致谢!

var jwt = require('jsonwebtoken');

var config = require('../config'),
    db = require('../services/database'),
    User = require('../models/user'),
    Organisation = require('../models/organisation'),
    Event = require('../models/event');

// The authentication controller.
var AuthController = {};

// Register a user.
AuthController.signUp = function(req, res) {
    if(!req.body.username || !req.body.password || !req.body.email) {
        res.json({ message: 'Please provide a username and a password.' });
    } else {
      var token = jwt.sign({ username: req.body.username }, config.keys.secret, { expiresIn: '30m' });  
        db.sync().then(function() {

            var newUser = {
                username: req.body.username,
                password: req.body.password,
                email: req.body.email,
                temporarytoken: token
            };
            console.log(newUser.temporarytoken);
            return User.create(newUser).then(function() {
                res.status(201).json({ message: 'Account created!' });
            });
        }).catch(function(error) {
            res.status(403).json({ message: 'Username already exists!' });
        });
    }
}
答案

你的错误信息是什么样的?

此外,如果您执行此代码,您是否看到错误?

        db.sync().then(function() {
            var token = jwt.sign({ username: req.body.username }, config.keys.secret, { expiresIn: '30m' }); 

            var newUser = {
                username: req.body.username,
                password: req.body.password,
                email: req.body.email,
                temporarytoken: token
            };
            console.log(newUser.temporarytoken);
            return User.create(newUser).then(function() {
                res.status(201).json({ message: 'Account created!' });
            });

附:为什么要将令牌保存到数据库?您应该将jwt发送到客户端,客户端将其保存到本地存储或cookie。这是jwt的重点。

以上是关于放置jwt.sign代码时出现JWT错误的主要内容,如果未能解决你的问题,请参考以下文章