2017-04-10 4 views
0

Ich möchte das Passwort überprüfen, wenn Benutzer sich einloggen, aber es gibt eine Fehlermeldung "TypeError: bcrypt.checkPassword ist keine Funktion".TypeError: bcrypt.checkPassword ist keine Funktion

Hier sind mein Code und ich verstehe nicht, warum bcrypt.checkPassword keine Funktion ist.

[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; 
    }); 
    }); 
}; 

[router.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'); 
    }); 
}); 
+0

Und wenn Sie nur verwenden: 'return checkPassword' statt' return bcrypt.checkPassword' – Hackerman

Antwort

0

Sie haben eine Datei bcrypt.js genannt und werden mit der NPM-Paket bcrypt.

das Paket verwenden, wie Sie in bcrypt.js tun müssen, würden Sie

require('bcrypt') //no path searches node_modules 

die Datei nutzen zu können, erstellt, wie Sie db.js tun wollen, müssen Sie Ihre Datei

umfassen
require('./bcrypt.js') //relative paths indicate local files 

Ich würde vorschlagen, Ihre Datei etwas anderes zu nennen, damit Sie die beiden nicht verwechseln.