/ / passport-local con mysql non funzionante - mysql, node.js, passport-local

passport-local con mysql non funzionante - mysql, node.js, passport-local

Sto usando node.js e passport e mysql per un login utente. Da cui proviene la fonte principale https://github.com/manjeshpv/node-express-passport-mysql/issues

Voglio aggiungere più colonne nella tabella. Ho iniziato con emailfield e cambio il codice come di seguito. Ho semplicemente aggiunto la variabile email nei posti necessari che penso. Non riesco a trovare il bug dove si blocca. senza modificare nulla, il codice funziona.

passport.js:

passport.use(
"local-signup",
new LocalStrategy({
// by default, local strategy uses username and password, we will override with email
usernameField : "username",
passwordField : "password",
//emailField : "email",
passReqToCallback : true // allows us to pass back the entire request to the callback
},
function(req, username, password, email, done) {
// find a user whose email is the same as the forms email
// we are checking to see if the user trying to login already exists
connection.query("SELECT * FROM users WHERE username = ?",[username], function(err, rows) {
if (err)
log.info(err);
//return done(err);
if (rows.length) {
return done(null, false, req.flash("signupMessage", "That username is already taken."));
} else {
// if there is no user with that username
// create the user
var newUserMysql = {
username: username,
email: email,
password: bcrypt.hashSync(password, null, null)  // use the generateHash function in our user model

};

var insertQuery = "INSERT INTO users ( username, password, email ) values (?,?,?)";
connection.query(insertQuery,[newUserMysql.username, newUserMysql.password, newUserMysql.email],function(err, rows) {
newUserMysql.id = rows.insertId;

return done(null, newUserMysql);
});
}
});
})
);

e qui il registro:

The magic happens on port 8080
GET /signup 200 20ms - 1.21kb
D:node-express-passport-mysqlnode_modulesmysqllibprotocolParser.js:82
throw err;
^
TypeError: undefined is not a function
at Object.SqlString.escape (D:node-express-passport-mysqlnode_modulesmysq
llibprotocolSqlString.js:46:13)
at D:node-express-passport-mysqlnode_modulesmysqllibprotocolSqlString.
js:80:19
at String.replace (native)
at Object.SqlString.format (D:node-express-passport-mysqlnode_modulesmysq
llibprotocolSqlString.js:71:14)
at Connection.format (D:node-express-passport-mysqlnode_modulesmysqllib
Connection.js:263:20)
at Connection.query (D:node-express-passport-mysqlnode_modulesmysqllibC
onnection.js:196:22)
at Query._callback (D:node-express-passport-mysqlconfigpassport.js:71:32)

at Query.Sequence.end (D:node-express-passport-mysqlnode_modulesmysqllib
protocolsequencesSequence.js:96:24)
at Query._handleFinalResultPacket (D:node-express-passport-mysqlnode_modul
esmysqllibprotocolsequencesQuery.js:144:8)
at Query.EofPacket (D:node-express-passport-mysqlnode_modulesmysqllibpr
otocolsequencesQuery.js:128:8)
28 Jun 21:03:58 - [nodemon] app crashed - waiting for file changes before starti
ng...

risposte:

1 per risposta № 1

Questo sembra essere il problema:

function(req, username, password, email, done) {

Hai aggiunto un argomento in più email che non dovrebbe essere lì, poiché ammorbidisce il done callback, quando il codice tenta di chiamarlo causerà un errore "non definito non è una funzione".

Se stai passando un extra email proprietà, è possibile accedervi tramite req.body.email (supponendo che tu stia usando un POST percorso per accedere).