将散列密码存储到数据库时出错
Error while storing hashed password into database
我正在用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'
})
}
});
}
用户table具有以下结构
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` = " +
"'b[=12=]D2eG3Jp.UhlYs.pbtYip.yMrCYkjhHiVZC3WwrtmKJG4pyRKZDae', " +
"`clientid` = '1', `email` = 'abc@xyz.com'"
}
Unknown column 'email' in 'field list'
这是不言自明的。您的 table 中没有确认您已提供 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
}
我正在用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'
})
}
});
}
用户table具有以下结构
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` = " +
"'b[=12=]D2eG3Jp.UhlYs.pbtYip.yMrCYkjhHiVZC3WwrtmKJG4pyRKZDae', " +
"`clientid` = '1', `email` = 'abc@xyz.com'"
}
Unknown column 'email' in 'field list'
这是不言自明的。您的 table 中没有确认您已提供 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
}