首页 > 解决方案 > 将散列密码存储到数据库时出错

问题描述

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

标签: mysqlnode.jsbcrypt

解决方案


“字段列表”中的未知列“电子邮件”

这是自我解释。您的表格中没有确认您提供的 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
}

推荐阅读