我正在nodejs中构建用户注册和身份验证系统。当我尝试加密用户密码并将其存储到我的sql用户数据库中时,它给出了一个错误。
注册控制器的实现如下:
var express=require("express");
var connection = require('./../config');
const bcrypt = require('bcrypt')
module.exports.register=function(req,res){
var today = new Date();
var encryptedString = bcrypt.hashSync(req.body.password, 5);
var user={
"userid":req.body.userid,
"password":encryptedString,
"clientid":req.body.clientid,
"email":req.body.email
}
connection.query('INSERT INTO user SET ?',user, function (error, results, fields) {
if (error) {
res.json({
status:false,
message:'query error'
})
}else{
res.json({
status:true,
data:results,
message:'user registered sucessfully'
})
}
});
}
用户表具有以下结构
CREATE TABLE `user`(
`userid` varchar(25) NOT NULL,
`password` varchar(60) NOT NULL,
`clientid` varchar(25) NOT NULL,
PRIMARY KEY (`userid`),
CONSTRAINT `user_ibfk_1` FOREIGN KEY (`clientid`) REFERENCES `client`(`clientid`)) ENGINE=InnoDB DEFAULT CHARSET=latin1;
如果不进行密码加密,则以明文密码成功存储用户。为什么在加密密码时会出现此问题?
任何澄清此问题的帮助将不胜感激。
这是console.log(错误)的结果:
code: 'ER_BAD_FIELD_ERROR',
errno: 1054,
sqlMessage: "Unknown column 'email' in 'field list'",
sqlState: '42S22',
index: 0,
sql: "INSERT INTO user SET `userid` = '1', `password` = " +
"'$2b$05$0D2eG3Jp.UhlYs.pbtYip.yMrCYkjhHiVZC3WwrtmKJG4pyRKZDae', " +
"`clientid` = '1', `email` = 'abc@xyz.com'"
}
答案 0 :(得分:1)
“字段列表”中的未知列“电子邮件”
这是自我解释。您的表中没有电子邮件列可确认您提供的DDL。
`userid` varchar(25) NOT NULL,
`password` varchar(60) NOT NULL,
`clientid` varchar(25) NOT NULL,
没有电子邮件
通过用户发送
时var user={
"userid":req.body.userid,
"password":encryptedString,
"clientid":req.body.clientid,
"email":req.body.email
}