Tengo un problema con el módulo Passport.js y Express.js.
Este es mi código y solo quiero usar un inicio de sesión codificado para el primer intento.
Siempre recibo el mensaje:
Busqué mucho y encontré algunas publicaciones en stackoverflow pero no obtuve el error.
Error: failed to serialize user into session
at pass (c:\Development\private\aortmann\bootstrap_blog\node_modules\passport\lib\passport\index.js:275:19)
Mi código se ve así.
'use strict';
var express = require('express');
var path = require('path');
var fs = require('fs');
var passport = require('passport');
var LocalStrategy = require('passport-local').Strategy;
var nodemailer = require('nodemailer');
var app = express();
module.exports = function setupBlog(mailTransport, database){
var config = JSON.parse(fs.readFileSync('./blog.config'));
app.set('view options', {layout: false});
app.use(express.static(path.join(__dirname, '../', 'resources', 'html')));
app.use(express.bodyParser());
app.use(express.cookieParser());
app.use(express.session({ secret: 'secret' }));
app.use(passport.initialize());
app.use(passport.session());
app.get('/blog/:blogTitle', function(req, res) {
var blogTitle = req.params.blogTitle;
if(blogTitle === 'newest'){
database.getLatestBlogPost(function(post) {
res.send(post);
});
} else {
database.getBlogPostByTitle(blogTitle, function(blogPost) {
res.send(blogPost);
});
}
});
passport.use(new LocalStrategy(function(username, password, done) {
// database.login(username, password, done);
if (username === 'admin' && password === 'admin') {
console.log('in');
done(null, { username: username });
} else {
done(null, false);
}
}));
app.post('/login', passport.authenticate('local', {
successRedirect: '/accessed',
failureRedirect: '/access'
}));
app.listen(8080);
console.log('Blog is running on port 8080');
}();
Gracias.
node.js
express
login
passport.js
passport-local
usuario2244925
fuente
fuente
serializeUser
función almacena solo la ID de usuario en la sesión ydeserializeUser
usa esa ID para recuperar los datos de usuario de una base de datos (por ejemplo). Esto es para evitar que el almacenamiento de la sesión contenga los datos reales del usuario.Si decide no usar sesiones, puede configurar la sesión en falso
fuente
Parece que te perdiste una parte de la configuración de passportjs, específicamente estos dos métodos:
Agregué un poco sobre
._id
vs..id
pero este fragmento es de la sección Configurar de documentos, dale otra lectura y buena suerte :)fuente
Aquí, una manera funcional pero aún perezosa de usar sesiones y aún "serializar" los valores.
en caso de errores extraños solo pregúntese: "¿Realmente configuro '_id' en mi objeto de usuario?" - En la mayoría de los casos no lo haces. Entonces use un atributo apropiado como clave.
fuente
Usando Promise con serializeUser y deserializeUser:
Consulte mi repositorio de github para ver un ejemplo de código completo sobre cómo resolver este problema.
fuente
en passport.use ('local-login' ...) / o / ('local-singup' ...)
si err tiene que devolver "false" err {return done (null, req.flash ('megsign', 'Nombre de usuario ya existe #! #'));} true {return done (null, false, req.flash (' megsign ',' El nombre de usuario ya existe #! # '));}
fuente