Ошибка при сохранении хешированного пароля в базе данных - PullRequest
0 голосов
/ 28 мая 2019

Я создаю систему регистрации и аутентификации пользователей в 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 Ответ

1 голос
/ 28 мая 2019

Неизвестный столбец 'email' в 'списке полей'

Это не требует пояснений.В вашей таблице нет столбца электронной почты, подтверждающего предоставленный вами 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
}
...