Mam następujący skrypt:
var oracledb = require('oracledb');
var bcrypt = require('bcrypt');
var jwt = require('jsonwebtoken');
var config = require('../ConfigData/database');
function post(req, res, next) {
var user = {
email: req.body.email
};
//req.body.password = 'zxcvbn';
//req.body.email = '[email protected]';
var unhashedPassword = req.body.password;
console.log('INPUT:' +req.body.email+' - '+req.body.password);
bcrypt.genSalt(10, function(err, salt) {
if (err) {
return next(err);
}
bcrypt.hash(unhashedPassword, salt, function(err, hash) {
if (err) {
return next(err);
}
user.hashedPassword = hash;
console.log(user.hashedPassword);
insertUser(user, function(err, user) {
var payload;
if (err) {
return next(err);
}
payload = {
sub: user.email,
role: user.role
};
res.status(200).json({
user: user,
token: jwt.sign(payload, config.jwtSecretKey, {expiresIn: 360})
});
});
});
});
}
module.exports.post = post;
function insertUser(user, cb) {
oracledb.getConnection(
// config.hrPool
{
user: "SYSTEM",
password: "********",
connectString: "ANDROMEDALOC"
}
,
function(err, connection){
if (err) {
return cb(err);
}
connection.execute(
`insert into jsao_users (
email,
password,
role
)
values (
:email,
:password,
\'BASE\'
)
returning
id,
email,
role
into
:rid,
:remail,
:rrole`,
{
email: user.email.toLowerCase(),
password: user.hashedPassword,
rid: {
type: oracledb.NUMBER,
dir: oracledb.BIND_OUT
},
remail: {
type: oracledb.STRING,
dir: oracledb.BIND_OUT
},
rrole: {
type: oracledb.STRING,
dir: oracledb.BIND_OUT
}
},
{
autoCommit: true
},
function(err, results){
if (err) {
connection.release(function(err) {
if (err) {
console.error(err.message);
}
});
return cb(err);
}
console.log(results.outBinds);
cb(null, {
id: results.outBinds.rid[0],
email: results.outBinds.remail[0],
role: results.outBinds.rrole[0]
});
connection.release(function(err) {
if (err) {
console.error(err.message);
}
});
});
}
);
}
skrypt powinien dodać użytkownika do bazy danych jeśli takowy nie istnieje.
wywołanie z postman-a: http://localhost:3333/api/users?user='[email protected]'&password='zxcvbn'
i odpowiedź w postman
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Error</title>
</head>
<body>
<pre>Error: data and salt arguments required<br> at Object.hash (c:\ANDROMEDA_WEB\OracleNodeAuth\node_modules\bcrypt\bcrypt.js:137:17)<br> at c:\ANDROMEDA_WEB\OracleNodeAuth\src\Controllers\Users.js:23:16</pre>
</body>
</html>
i w konsoli:
Initializing database connection
Starting Application
Web server listening on localhost:3333
Initializing model Webserver
INPUT:undefined - undefined
::1 - - [03/Feb/202255:00 +0000] "POST /api/users?user=%[email protected]%27&password=%27zxcvbn%27 HTTP/1.1" 500 352 "-" "PostmanRuntime/7.29.0"
Error: data and salt arguments required
at Object.hash (c:\ANDROMEDA_WEB\OracleNodeAuth\node_modules\bcrypt\bcrypt.js17)
at c:\ANDROMEDA_WEB\OracleNodeAuth\src\Controllers\Users.js16
Co robię źle? Wygląda na to że parametry przy wywołaniu nie przechodzą.