Tôi là người mới bắt đầu sử dụng NodeJS và tôi đang cố gắng tạo một biểu mẫu xác thực bằng NodeJS + Express. Tôi muốn xác minh mật khẩu của mình (khi "xác nhận mật khẩu" khác với "mật khẩu", nó sẽ không trả về gì cả. Thật không may, tôi liên tục nhận được "thông số dữ liệu và muối được yêu cầu". Tôi đã thử hỏi theo nhiều cách khác nhau Một số điều kiện nhưng tôi vẫn giữ gặp lỗi này. Bạn có ý tưởng nào để làm cho nó hoạt động không? Đây là tệp user.js:
const pool = require('./pool');
const bcrypt = require('bcrypt');
hàm Người dùng() {};
Người dùng.prototype = {
tìm: hàm (người dùng = null, gọi lại)
{
nếu (người dùng) {
var field = Number.isInteger(user) ? 'id' : 'username';
}
let sql = `CHỌN * TỪ người dùng Ở ĐÂU ${field} = ?`;
pool.query(sql, user, function(err, result) {
nếu (lỗi)
ném lỗi
if(result.length) {
gọi lại (kết quả [0]);
}else {
gọi lại (null);
}
});
},
tạo: hàm (nội dung, gọi lại)
{
var pwd = body.password;
var cpwd = body.confirmpassword;
// ở đây tôi băm pass
body.password = bcrypt.hashSync(pwd,10);
body.confirmpassword = bcrypt.hashSync(cpwd, 10);
if (body.password != body.confirmpassword){
gọi lại (null);
}
khác {
var liên kết = [];
for(chống đỡ trong cơ thể){
bind.push(body[prop]);
}
let sql = `CHÈN VÀO người dùng (tên người dùng, tên đầy đủ, mật khẩu) GIÁ TRỊ (?, ?, ?)`;
pool.query(sql, bind, function(err, result) {
if(err) ném lỗi;
gọi lại (result.insertId);
});
}
},
đăng nhập: chức năng (tên người dùng, mật khẩu, gọi lại)
{
this.find(tên người dùng, hàm(người dùng) {
nếu (người dùng) {
if(bcrypt.compareSync(password, user.password)) {
gọi lại (người dùng);
return;
}
}
gọi lại (null);
});
}
}
module.exports = Người dùng;
Tệp pages.js:
const express = require('express');
const Người dùng = require('../core/user');
const bộ định tuyến = express.Router();
const user = Người dùng mới();
router.get('/', (req, res, next) => {
hãy để người dùng = req.session.user;
nếu (người dùng) {
res.redirect('/home');
return;
}
res.render('index', {title:"Ứng dụng của tôi"});
})
router.get('/home', (req, res, next) => {
hãy để người dùng = req.session.user;
nếu (người dùng) {
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) {
nếu (kết quả) {
req.session.user = kết quả;
req.session.opp = 1;
res.redirect('/home');
}else {
res.send('Tên người dùng/Mật khẩu không chính xác!');
}
})
});
router.post('/register', (req, res, next) => {
hãy để userInput = {
tên người dùng: req.body.username,
tên đầy đủ: req.body.fullname,
mật khẩu: req.body.password
};
user.create(userInput, function(lastId) {
if(lastId) {
user.find(lastId, function(result) {
req.session.user = kết quả;
req.session.opp = 1;
res.redirect('/home');
});
}else {
console.log('Lỗi tạo người dùng mới ...');
}
});
});
router.get('/logout', (req, res, next) => {
if(req.session.user) {
req.session.destroy(function() {
res.redirect('/');
});
}
});
module.exports = bộ định tuyến;
Trong userInput bạn không vượt qua xác nhận mật khẩu
tài sản.
hãy để userInput = {
tên người dùng: req.body.username,
tên đầy đủ: req.body.fullname,
mật khẩu: req.body.password
};
Trong phương thức tạo, bạn đang truy cập nó.var cpwd = body.confirmpassword;
cpwd là null, đó là lý do gây ra lỗi.
body.confirmpassword = bcrypt.hashSync(cpwd, 10);//**cpwd là null**
Theo tài liệu, dữ liệu là tham số bắt buộc và không được để trống.
hashSync(dữ liệu, muối)
data - [bắt buộc] - Dữ liệu cần mã hóa.
salt - [bắt buộc] - Muối dùng để băm mật khẩu.
Tôi là một lập trình viên xuất sắc, rất giỏi!