gpt4 book ai didi

jwt - Sequelize - 模型设置方法不起作用,我没有收到任何错误

转载 作者:行者123 更新时间:2023-12-03 22:19:49 26 4
gpt4 key购买 nike

我正在尝试生成一个新 token 并将其存储在我使用 MySQL 作为 DMS 的数据库 token 表中。我正在使用 jwt 库生成 token 。我没有收到任何错误,也没有生成我生成的 token 。但是正在生成新用户。这个路由处理函数负责创建一个新的用户帐户。这还会为该用户创建一个新 token ,以允许他/她执行需要身份验证的操作。

我尝试使用所有可能的方法为使用 sequelize 的模型设置 setter 方法。我阅读了文档并使用了两种方法,但都没有奏效。这两种方法是 set() 和 setterMethod: ...代码在这里。
我还尝试创建一个实例,然后访问 setter 方法,但仍然无效。
最后,我尝试了所有可能的方法来使用 try 和 catch 块在终端上显示错误,但我无法创建它。
刚才,我尝试在 generateAuthToken setter 方法中 console.log “hello world”,但我没有在服务器上收到该消息。所以,我认为问题与程序无法识别该函数名称有关。

这是我的 token 模型,是使用 sequelize 库定义的:

const jwt = require('jsonwebtoken')

const sequelize = require("../db/sequelize")

const User = require("./user");

const TokenSchema = sequelize.define("token", {
userId: {
type: Sequelize.INTEGER,
allowNull: false,
references: {
model: 'User',
key: 'id'
}
},
token: {
type: Sequelize.STRING,
allowNull: false
}
}, {
tableName: 'tokens',
classMethods: {
associate : function(models) {
TokenSchema.belongsTo(models.User)
}
},
setterMethods: {

async generateAuthToken(user) {
const token = await jwt.sign({ id: user.id }, process.env.JWT_SECRET)

this.setDataValue('token', token);
this.setDataValue('userId', user.id);

},
}
})


module.exports = TokenSchema

这是从 token 模型调用 generateAuthToken setter 方法的用户路由:
const express = require('express')
const multer = require('multer')
// const sharp = require('sharp')
const User = require('../models/user')
const Token = require('../models/token')

const auth = require('../middleware/auth')
const { sendWelcomeEmail, sendCancelationEmail } = require('../emails/sendEmail')
const router = new express.Router()

router.post('/users', async (req, res) => {

const user = new User(req.body)

try {
await user.save()

await Token.generateAuthToken(user.id)

res.status(201).send({ user })

} catch (e) {
res.status(400).send()
}
})

可悲的是,我没有收到任何错误。这使得调试变得如此困难。

最佳答案

您的 TokenSchema 本地副本通过您的 generateAuthToken 方法更新,但它不会通过数据库持久化。换句话说,您的 Javascript 对象已更新,但您需要像这样推送它:

async generateAuthToken(user) {
const token = await jwt.sign({ id: user.id }, process.env.JWT_SECRET)

this.setDataValue('token', token);
this.setDataValue('userId', user.id);

await this.save();
}

关于jwt - Sequelize - 模型设置方法不起作用,我没有收到任何错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56204867/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com