【问题标题】:Data and salt arguments required error (authorization)数据和盐参数需要错误(授权)
【发布时间】:2020-01-09 19:27:06
【问题描述】:

我是 NodeJS 的初学者,我尝试使用 NodeJS + express 制作身份验证表单。我想验证我的密码(当“确认密码”与“密码”不同时,它不应该返回任何内容。不幸的是,我不断收到“需要数据和盐参数”。我尝试了不同的方式来设置一些条件,但是我不断收到此错误。任何想法我应该如何使它工作? 这是文件 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;

【问题讨论】:

    标签: javascript node.js express error-handling authorization


    【解决方案1】:

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

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

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

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

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

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

    hashSync(数据,盐)

    data - [REQUIRED] - 要加密的数据。

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

    【讨论】:

    • 我在用户输入中添加了确认密码,但没有任何变化。
    • 如果body.passwordbody.confirmpassword 已定义且在此语句后不为空,请记录 ` var pwd = body.password; var cpwd = body.confirmpassword;` 添加 console.log(pwd, cpwd ); 时的日志输出是什么就在这些行之后
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-06-23
    • 1970-01-01
    • 2020-12-13
    • 2020-10-28
    • 1970-01-01
    • 1970-01-01
    • 2018-07-29
    相关资源
    最近更新 更多