gpt4 book ai didi

mysql - 为什么 Id 只保存在数据库中而没有其他数据?

转载 作者:行者123 更新时间:2023-11-29 02:38:51 24 4
gpt4 key购买 nike

我正在使用 Passport、sequelize 和 MySql 向我的 React 应用程序添加身份验证,但数据没有保存到 mySql 数据库中,只有 Id 和 null 字段。我正在尝试实现本地策略。

在 postman 中尝试邮寄路线时,我收到 200 响应,其中包含电子邮件和散列密码。但是,ID 字段显示为空。检查 mysql 数据库时,我可以看到添加了 ID 的新行,但用户名和密码为空。我在这里遗漏了什么吗?

Passport 策略文件

const Strategy = require('passport-local').Strategy;
const User = require('../models').User;
const bcrypt = require('bcryptjs');
const salt = bcrypt.genSaltSync(10);

const SignupStrategy = new Strategy({ passReqToCallback: true,
usernameField: "email", passwordField: "password" }, function (req, email,
password, done) {

User.findOne({
where: {
email: email
}
})
.then((user, error) => {
if (error)
return done(null, user);
})
const encryptedPassword = bcrypt.hashSync(password, salt);
let newUser = new User({
email,
password: encryptedPassword
})
User.create(newUser)
.then((user) => {
newUser
;
done(null, newUser)
})
.catch((error) => {
done(error, null)
})
});

module.exports = SignupStrategy;

用户模型

 module.exports = function (sequelize, DataTypes) {
var User = sequelize.define("User", {
username: {
type: DataTypes.STRING,
// allowNull: false,
unique: true,
validate: {
len: [1]
}
},
email: {
type: DataTypes.STRING,
// allowNull: false,
unique: true,
validate: {
isEmail: true
}
},
password: {
type: DataTypes.STRING,
// allowNull: false
}
});

return User;
};

路线

  const express = require('express');
const router = express.Router();
const passport = require('../passport');

router.post('/signup', (req, res, next) => {

passport.authenticate('local-signup', function(error, user, info) {
if (error) {
res.status(500).json({
message: 'Ooops, something happened',
error: error.message || 'Internal server error'
});
}

res.json({user})
})(req, res, next)
});

router.post('/signin', function(req, res, next) {
res.send('respond with a resource')
});

module.exports = router;

Passport 索引文件

const passport = require('passport');

const SignupStrategy = require('./SignupStrategy');
const SigninStrategy = require('./SigninStrategy');

passport.use('local-signin', SigninStrategy);
passport.use('local-signup', SignupStrategy);

module.exports = passport;

如果我在用户模型中将 allowNull 设置为 true,我会收到来自 sequelize 的验证错误(非空违规)。不知道现在该做什么

最佳答案

代替这个:

let newUser = new User({
email,
password: encryptedPassword
})

使用这个:

let newUser = {
email,
password: encryptedPassword
};

There is no need to create any special object to create entry, it will need just need simple json object.

关于mysql - 为什么 Id 只保存在数据库中而没有其他数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57435388/

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