将哈希密码存储到数据库时出错

时间:2019-05-28 07:40:32

标签: mysql node.js bcrypt

我正在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'"
}

1 个答案:

答案 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
}