Quiero verificar la contraseña cuando los usuarios inician sesión, pero hay un mensaje de error "TypeError: bcrypt.checkPassword no es una función".
Aquí está mi código y no entiendo por qué bcrypt.checkPassword no es una función.
[bcrypt.js]
var checkPassword = function(textEnteredInLoginForm, hashedPasswordFromDatabase) { return new Promise(function(resolve, reject) { bcrypt.compare(textEnteredInLoginForm, hashedPasswordFromDatabase, function(err, doesMatch){ if (err) { reject(err); } console.log(doesMatch); resolve(doesMatch); }); }); }; module.exports.checkPassword = checkPassword;[db.js]
var bcrypt = require('bcrypt'); module.exports.login = function(email, password){ var hashedPasswordFromDatabase; var query = `SELECT * FROM users WHERE email ='{$req.body.email}'`; db.query(query).then(function(data){ return hashedPasswordFromDatabase = data[0].password; console.log("hashedPasswordFromDatabase : "+hashedPasswordFromDatabase); }); return bcrypt.checkPassword(password).then(function(password, hashedPasswordFromDatabase){ var query = 'SELECT * FROM users'; return db.query(query).then(function(results){ return results.rows; }); }); };[enrutador.js]
var express = require('express'); var cookieSession = require('cookie-session'); var db = require('../configure/db'); var bcrypt = require('../public/js/bcrypt'); var router = express.Router(); router.route('/login') .get(function(req,res) { res.render('login'); // url -> /login }) .post(function(req,res){ db.login(req.body.email, req.body.password) .then(function(data){ res.redirect('/petition'); // login -> petition }).catch(function(error){ console.log(error); res.render('error'); }); });Creó un archivo llamado bcrypt.js y está usando el paquete npm bcrypt .
Para usar el paquete, como tendría que hacer en bcrypt.js , tendría que
require('bcrypt') //no path searches node_modules Para usar el archivo que creó, como quiere hacer db.js , debe incluir su archivo
require('./bcrypt.js') //relative paths indicate local filesSugeriría nombrar su archivo con algo diferente para que no confunda los dos.