Ich habe ein Problem mit dem Passport.js-Modul und Express.js.
Dies ist mein Code und ich möchte nur einen fest codierten Login für den ersten Versuch verwenden.
Ich bekomme immer die Nachricht:
Ich habe viel gesucht und einige Beiträge im Stackoverflow gefunden, aber ich habe den Fehler nicht bekommen.
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 so 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');
}();
Vielen Dank.
node.js
express
login
passport.js
passport-local
user2244925
quelle
quelle
serializeUser
Funktion nur die Benutzer-ID in der Sitzung speichert unddeserializeUser
diese ID verwendet, um beispielsweise die Benutzerdaten aus einer Datenbank abzurufen. Dies soll verhindern, dass der Sitzungsspeicher die tatsächlichen Benutzerdaten selbst enthält.Wenn Sie keine Sitzungen verwenden möchten, können Sie die Sitzung auf false setzen
quelle
Klingt so, als hätten Sie einen Teil des Passportjs-Setups verpasst, insbesondere diese beiden Methoden:
Ich habe das bisschen über
._id
vs. hinzugefügt,.id
aber dieses Snippet stammt aus dem Abschnitt "Konfigurieren" der Dokumente. Lesen Sie es noch einmal und viel Glück :)quelle
Hier eine funktionierende, aber immer noch faule Art, Sitzungen zu verwenden und die Werte immer noch zu "serialisieren".
Für den Fall oder seltsame Fehler fragen Sie sich einfach: "Setze ich '_id' in meinem Benutzerobjekt?" - In den meisten Fällen nicht. Verwenden Sie also ein geeignetes Attribut als Schlüssel.
quelle
Verwenden von Promise mit serializeUser & deserializeUser:
In meinem Github-Repo finden Sie ein vollständiges Codebeispiel zur Lösung dieses Problems.
quelle
in passport.use ('local-login' ...) / oder / ('local-singup' ...)
Wenn err, müssen Sie "false" zurückgeben. err {return done (null, req.flash ('megsign', 'Benutzername existiert bereits #! #'));} true {return done (null, false, req.flash (') megsign ',' Benutzername existiert bereits #! # '));}
quelle