J'ai un problème avec le module Passport.js et Express.js.
Ceci est mon code et je veux juste utiliser une connexion codée en dur pour le premier essai.
Je reçois toujours le message:
J'ai beaucoup cherché et trouvé des articles dans stackoverflow mais je n'ai pas eu l'échec.
Error: failed to serialize user into session
at pass (c:\Development\private\aortmann\bootstrap_blog\node_modules\passport\lib\passport\index.js:275:19)
Mon code ressemble à ceci.
'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');
}();
Merci.
node.js
express
login
passport.js
passport-local
user2244925
la source
la source
serializeUser
fonction stocke uniquement l'ID utilisateur dans la session etdeserializeUser
utilise cet ID pour récupérer les données utilisateur à partir d'une base de données (par exemple). Cela évite que le stockage de session ne contienne les données utilisateur réelles.Si vous décidez de ne pas utiliser de sessions, vous pouvez définir la session sur false
la source
On dirait que vous avez manqué une partie de la configuration de passeportjs, en particulier ces deux méthodes:
J'ai ajouté le mot sur
._id
vs,.id
mais cet extrait de code provient de la section Configurer de la documentation, donnez-en une autre lecture et bonne chance :)la source
Voici une manière fonctionnelle mais toujours paresseuse d'utiliser les sessions tout en «sérialisant» les valeurs.
en cas d'erreurs étranges, demandez-vous simplement: "Dois-je définir '_id' dans mon objet utilisateur?" - dans la plupart des cas, vous ne le faites pas. Utilisez donc un attribut approprié comme clé.
la source
Utilisation de Promise avec serializeUser et deserializeUser:
Veuillez consulter mon dépôt github pour un exemple de code complet sur la façon de résoudre ce problème.
la source
dans passeport.use ('local-login' ...) / ou / ('local-singup' ...)
si err vous devez retourner "false" err {return done (null, req.flash ('megsign', 'Le nom d'utilisateur existe déjà #! #'));} true {return done (null, false, req.flash (' megsign ',' Le nom d'utilisateur existe déjà #! # '));}
la source