Fehler: Fehler beim serialisieren Benutzer in die Sitzung. Falsche Funktion übergeben serializeUser()?
Ich versuche meine ersten Schritte mit dem Express-framework für Node. Ich war zu versuchen, einen winzigen-Authentifizierung beispielsweise mithilfe von Passport. Aber ich kann es nicht arbeiten; ich erhalte die Fehlermeldung: Error: failed to serialize user into session
.
Ich installiert node-inspector, um zu versuchen, um zu sehen, was Los ist. Offenbar, meine Serialisierung-Funktion aufgerufen wird, und es führt done(null, 0)
als erwartet. Ich habe versucht, einen Blick auf Pass-code, aber ich konnte nicht verstehen, was das problem ist. Das ist so ziemlich mein Erster Versuch einer Knoten-Anwendung, also bin ich nicht vertraut mit dem code. Kann jemand mir einen Tipp geben? Danke.
var express = require('express');
var jade = require('jade');
var passport = require('passport');
var LocalStrategy = require('passport-local').Strategy;
var app = express();
/*
* Settings
*/
app.configure(function(){
app.set('views', __dirname + '/views');
app.set('view engine', 'jade');
app.use(express.logger());
app.use(express.cookieParser());
app.use(express.bodyParser());
app.use(express.session({ secret: 'cat in the bag' }));
app.use(passport.initialize());
app.use(passport.session());
passport.use(new LocalStrategy(
function(username, password, done) {
done(null, { id: 0, username: 'juancito' });
}
));
passport.serializeUser(function(user, done) {
done(null, user.id);
});
passport.deserializeUser(function(id, done) {
done(null, 'juancito');
});
});
/*
* Routes
*/
app.get('/', function(req, res) {
res.render('index', { title: 'Welcome!' });
});
app.get('/login', function(req, res) {
if (req.user)
return res.redirect('/');
res.render('login', { title: 'Log in' });
});
app.post('/login',
passport.authenticate('local', {
successRedirect: '/',
failureRedirect: '/login'
})
);
app.get('/logout', function(req, res) {
req.logOut();
res.redirect('/');
});
app.listen(3000);
console.log('Listening on port 3000.');
- Downvoted, denn dies ist ein häufiges symptom, aber dies ist eine fremde Ursache (id == 0). Meine ids (wie die meisten Menschen-ids) sind alle nicht-0, und ich bin noch immer dieser Fehler.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Das Problem ist, dass
0
ist eine false-y-Wert in JavaScript, also Pass denkt man noch nicht serialisiert Ihre Benutzer.Ich würde empfehlen, beginnend Benutzer-IDs bei 1 (was bei SQL-Datenbanken), oder (wenn Sie wirklich brauchen, Ganzzahlen, beginnend bei 0) zu serialisieren als strings an die Sitzung.
Sollten Sie vielleicht weisen Sie Ihre serialisieren/Deserialisieren Rückrufe vor dem Aufruf Reisepass.initialize() und Pass.session().