gpt4 book ai didi

javascript - 数据和盐参数需要错误(授权)

转载 作者:太空宇宙 更新时间:2023-11-03 22:19:41 28 4
gpt4 key购买 nike

我是 NodeJS 的初学者,我尝试使用 NodeJS + Express 制作身份验证表单。我想对我的密码进行验证(当“confirmpassword”与“password”不同时,它应该不返回任何内容。不幸的是,我不断收到“需要数据和盐参数”。我尝试以不同的方式提出一些条件,但是我不断收到此错误。我应该如何使其工作有什么想法吗?这是文件 user.js:

const pool = require('./pool');
const bcrypt = require('bcrypt');


function User() {};

User.prototype = {

find : function(user = null, callback)
{
if(user) {
var field = Number.isInteger(user) ? 'id' : 'username';
}
let sql = `SELECT * FROM users WHERE ${field} = ?`;

pool.query(sql, user, function(err, result) {
if(err)
throw err
if(result.length) {
callback(result[0]);
}else {
callback(null);
}
});
},

create : function(body, callback)
{
var pwd = body.password;
var cpwd = body.confirmpassword;

// here i hash the pass
body.password = bcrypt.hashSync(pwd,10);
body.confirmpassword = bcrypt.hashSync(cpwd, 10);

if (body.password != body.confirmpassword){
callback(null);
}
else {

var bind = [];

for(prop in body){
bind.push(body[prop]);
}

let sql = `INSERT INTO users(username, fullname, password) VALUES (?, ?, ?)`;

pool.query(sql, bind, function(err, result) {
if(err) throw err;
callback(result.insertId);
});
}
},

login : function(username, password, callback)
{
this.find(username, function(user) {
if(user) {
if(bcrypt.compareSync(password, user.password)) {
callback(user);
return;
}
}
callback(null);
});
}

}
module.exports = User;

文件pages.js:

const express = require('express');
const User = require('../core/user');
const router = express.Router();

const user = new User();

router.get('/', (req, res, next) => {
let user = req.session.user;
if(user) {
res.redirect('/home');
return;
}
res.render('index', {title:"My application"});
})

router.get('/home', (req, res, next) => {
let user = req.session.user;
if(user) {
res.render('home', {opp:req.session.opp, name:user.fullname});
return;
}
res.redirect('/');
});


router.post('/login', (req, res, next) => {
user.login(req.body.username, req.body.password, function(result) {
if(result) {
req.session.user = result;
req.session.opp = 1;
res.redirect('/home');
}else {
res.send('Username/Password incorrect!');
}
})

});

router.post('/register', (req, res, next) => {
let userInput = {
username: req.body.username,
fullname: req.body.fullname,
password: req.body.password
};

user.create(userInput, function(lastId) {
if(lastId) {
user.find(lastId, function(result) {
req.session.user = result;
req.session.opp = 1;
res.redirect('/home');
});
}else {
console.log('Error creating a new user ...');
}
});
});

router.get('/logout', (req, res, next) => {
if(req.session.user) {
req.session.destroy(function() {
res.redirect('/');
});
}
});
module.exports = router;

最佳答案

在 userInput 中,您没有传递 confirmpassword 属性。

let userInput = {
username: req.body.username,
fullname: req.body.fullname,
password: req.body.password
};

在create方法中,您正在访问它。var cpwd = body.confirmpassword;

cpwd 为 null,这就是错误的原因。

   body.confirmpassword = bcrypt.hashSync(cpwd, 10);//**cpwd is null**

根据文档,数据是必需参数,并且不能为空。

hashSync(数据,盐)

数据 - [必需] - 要加密的数据。

salt - [必需] - 用于散列密码的盐。

关于javascript - 数据和盐参数需要错误(授权),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59670857/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com