Passport.js - Fehler: Fehler beim serialisieren Benutzer in Sitzung
Hab ich ein problem mit der Passport.js Modul und Express.js.
Dies ist mein code und ich will einfach nur verwenden Sie eine Feste Anmeldung für den ersten Versuch.
Ich bekomme immer die Meldung:
Ich suchte viel und fand einige Beiträge in stackoverflow, aber ich didnt get den Fehler.
Error: failed to serialize user into session
at pass (c:\Development\private\aortmann\bootstrap_blog\node_modules\passport\lib\passport\index.js:275:19)
Mein code sieht wie folgt aus.
'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');
}();
Dank.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sieht es aus wie Sie nicht umsetzen
passport.serializeUser
undpassport.deserializeUser
. Versuchen Sie, diese:serializeUser
Funktion speichert nur die Nutzer-id in der session, unddeserializeUser
verwendet diese id zum abrufen der Benutzerdaten aus einer Datenbank (zum Beispiel). Dies ist zu verhindern, dass die session-Speicherung von mit den eigentlichen Nutzdaten selbst.app.use(...)
usw.Wenn Sie sich entscheiden nicht zu verwenden, Sitzungen, Sie können die session auf false
Klingt wie Sie verpassten einen Teil des passportjs setup, speziell dieser beiden Methoden:
Ich fügte hinzu, die etwas über
._id
vs..id
aber dieser Ausschnitt ist aus der Konfigurieren Abschnitt der docs geben, die anderen Lesen und viel Glück 🙂Hier eine Arbeit, aber immer noch faul Weg, um in Sitzungen und immer noch "serialisize" die Werte.
im Fall komisch oder Fehler, frag dich einfach: "will ich rlly set '_id' in mein user-Objekt?" - in den meisten Fällen Sie nicht. So verwenden Sie ein geeignetes Attribut als Schlüssel.
Mithilfe Versprechen mit serializeUser & deserializeUser:
Bitte Lesen Sie meine github repo für eine vollständige code-Beispiel, wie dieses Problem zu lösen.
in Pass.benutzen Sie('local-login',...)/oder /("lokale-singup'...)
if err Sie sind zur Rückgabe "false"
err {return fertig(null, req.flash('megsign', 'Benutzername existiert bereits #!#'));}
wahr {return fertig(null, false, req.flash('megsign', 'Benutzername existiert bereits #!#'));}