mysql - 将散列密码存储到数据库时出错
问题描述
我正在 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(error) 的结果:
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'"
}
解决方案
“字段列表”中的未知列“电子邮件”
这是自我解释。您的表格中没有确认您提供的 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
}
推荐阅读
- mysql - 为什么 MySQL 会自动将字符串转换为数字?
- c# - 将未知字符转换为希腊字符
- android - 如何使用 LocationManager 在 android 中获取当前位置
- geolocation - 通过 Instagram 帖子获取您访问过的所有地点的列表
- ionic2 - Ionic 2 - 警报控制器动画
- php - Laravel - 试图获取非对象的属性 - PHP
- css - 自定义复选框按钮问题
- sql - oracle 程序的多值
- sockets - sin_addr 总是返回 0.0.0.0
- database - Asp.Net核心从数据库中的表中删除一个条目:结果是什么