放置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错误的主要内容,如果未能解决你的问题,请参考以下文章

使用 JWT 模块时出现错误“用户不存在错误”

jwt检查令牌是否过期

jwt sign(我需要获得令牌,但我得到了未定义)

将 ObjectID 与 jwt.sign() 和 verify() 一起使用

如何在 jwt.sign 中将 IP 地址作为参数

使用 RSA 算法 Django Rest Framework 简单 JWT 时出现错误无法反序列化密钥数据