¿Cómo puedo deserializar un usuario en pasaporte.js cuando lo conecto a una base de datos? Funcionó cuando usé una matriz, pero tan pronto como se conectó a la base de datos, dejó de funcionar. ¿Cómo puedo arreglar eso?
Error: Failed to deserialize user out of session at pass (/Users/frederik/IdeaProjects/vr/node_modules/passport/lib/authenticator.js:341:19) at deserialized (/Users/frederik/IdeaProjects/vr/node_modules/passport/lib/authenticator.js:346:7) at /Users/frederik/IdeaProjects/vr/src/login/passport-config.ts:42:54 at pass (/Users/frederik/IdeaProjects/vr/node_modules/passport/lib/authenticator.js:354:9) at Authenticator.deserializeUser (/Users/frederik/IdeaProjects/vr/node_modules/passport/lib/authenticator.js:359:5) at SessionStrategy.authenticate (/Users/frederik/IdeaProjects/vr/node_modules/passport/lib/strategies/session.js:61:10) at attempt (/Users/frederik/IdeaProjects/vr/node_modules/passport/lib/middleware/authenticate.js:369:16) at authenticate (/Users/frederik/IdeaProjects/vr/node_modules/passport/lib/middleware/authenticate.js:370:7) at Layer.handle [as handle_request] (/Users/frederik/IdeaProjects/vr/node_modules/express/lib/router/layer.js:95:5) at trim_prefix (/Users/frederik/IdeaProjects/vr/node_modules/express/lib/router/index.js:323:13) const authenticateUserDB = (email: string, password: string, done: any) => { sql._getInstance()._getConnection().query('SELECT * FROM `users` WHERE ?',{email:email}, function (error:MysqlError|null, results:any) { if (error) return done(error, false, "No database connection"); if(results.length == 0) return done(null, false, "No User with that email"); //TODO:encrypt if(password == results[0].password){ return done(null, { id: results[0]['uuid'], name: results[0]['name'], email: results[0]['email'], password: results[0]['password'] }); }else{ return done(null, false, "Password is incorect"); } }); } const getUserByUUID = (uuid:string)=>{ sql._getInstance()._getConnection().query('SELECT * FROM `users` WHERE ?',{uuid:uuid}, function (error:MysqlError|null, results:any) { if (error) throw Error(); if(results.length == 0) throw Error(); return { id: results[0]['uuid'], name: results[0]['name'], email: results[0]['email'], } }); } passport.use(new Strategy({usernameField: 'email'}, authenticateUserDB)); passport.serializeUser((user: any, done: any) => done(null, user.id)); passport.deserializeUser((id: any, done: any) => done(null, getUserByUUID(id)));El problema fue que la deserialización no esperó a getUserByUUid
const getUserByUUID = (uuid: string) => { return new Promise((resolve, reject) => { sql._getInstance()._getConnection().query('SELECT * FROM `users` WHERE ?', {uuid: uuid}, function (error: MysqlError | null, results: any) { if (error) reject(""); if (results.length == 0) reject(""); resolve({ id: results[0]['uuid'], name: results[0]['name'], email: results[0]['email'], password: results[0]['password'] }); }); }) } passport.deserializeUser(async (id: any, done: any) => done(null, await getUserByUUID(id)));