Ich versuche, eine Benutzeranmeldung und Registrierung mit dem ORM Sequelize in Node einzurichten. Ich habe den Registrierungsteil gut funktioniert. Meine Modellinstanz wird als Benutzer definiert, und wenn ich User.createUser aufruft, funktioniert meine Modellfunktion, und der Datenbank wird ein Benutzer hinzugefügt. Wenn ich jedoch versuche, meine getUserNameById-Funktion in meiner lokalen Pass-Strategie zu verwenden, erhalte ich die Fehlermeldung "Benutzer ist nicht definiert". Ich bin seit über einem Tag festgefahren, um das herauszufinden.Warum ist mein Sequelize-Modell nur dann undefiniert, wenn ich versuche, Suchfunktionen zu verwenden?
Modell-Datei (Ich habe importiert sequelize, bcrypt und erstellt eine Verbindung)
var Users = connection.define("Users", {
id: {
type: Sequelize.INTEGER,
primaryKey: true,
autoIncrement: true,
},
name: {
type: Sequelize.STRING
},
username: {
type: Sequelize.STRING
},
account: {
type: Sequelize.STRING
},
email: {
type: Sequelize.STRING
},
password: {
type: Sequelize.STRING
},
}, {
timestamps: false
});
Users.sync();
connection.authenticate()
.then(function() {
console.log("CONNECTED! ");
})
.catch(function (err) {
console.log("MYSQL ERROR: FAILED TO CONNECT");
})
.done();
module.exports = function (connection, DataTypes) {
return Users;
}
module.exports.createUser = function (newUser) {
bcrypt.genSalt(10, function(err, salt) {
bcrypt.hash(newUser.password, salt, function(err, hash) {
newUser.password = hash;
Users.create(newUser).then(function (Users){
console.dir(Users.get());
})
});
});
}
module.exports.getUserByUsername = function (username) {
return Users.find({
where: {username: username}
}).then(function (user) {}, function (err) {
console.log(err);
});
}
module.exports.comparePassword = function(candidatePassword, hash, done, user){
bcrypt.compare(password, hash, function(err, isMatch){
if (err) console.log(err)
if (isMatch) {
return done(null, user)
} else {
return done(null, false)
}
});
}
module.exports.getUserById = function(id, callback){
Users.findAll({
where: {id: id}
});
}
Meine Route Code, insbesondere die lokale Pass Strategie, die ich Mühe, mich mit
var User = require("../models/users");
var express = require('express');
var router = express.Router();
var passport = require('passport');
var LocalStrategy = require('passport-local').Strategy;
passport.use(new LocalStrategy(
function (username, password, done) {
User.getUserByUsername(username, function (user) {
if(!user){
return done(null, false, {message:'Incorrect username'})
}
})
User.comparePassword(password, user.password, function (err, isMatch) {
if(err) throw err;
if(isMatch){
return done(null, user);
}else{
return done(null, false, {message: 'Invalid password'});
}
})
}
));