У меня проблема с модулем Passport.js и Express.js.
Это мой код, и я просто хочу использовать жестко закодированный логин для первой попытки.
Я всегда получаю сообщение:
Я много искал и нашел несколько сообщений в stackoverflow, но не получил сбой.
Error: failed to serialize user into session
at pass (c:\Development\private\aortmann\bootstrap_blog\node_modules\passport\lib\passport\index.js:275:19)
Мой код выглядит так.
'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');
}();
Спасибо.
node.js
express
login
passport.js
passport-local
user2244925
источник
источник
serializeUser
функция хранит только идентификатор пользователя в сеансе иdeserializeUser
использует этот идентификатор для извлечения пользовательских данных из базы данных (например). Это сделано для того, чтобы хранилище сеансов не содержало сами данные пользователя.Если вы решите не использовать сеансы, вы можете установить для сеанса значение false
источник
Похоже, вы пропустили часть настройки passportjs, а именно эти два метода:
Я добавил немного о
._id
против,.id
но этот фрагмент из раздела Конфигурирования документов, дай еще раз прочитать и удачи :)источник
Здесь рабочий, но все еще ленивый способ использования сессий и все же «сериализации» значений.
на случай, если возникнут странные ошибки, просто спросите себя: «Можно ли в моем пользовательском объекте установить« _id »?» - в большинстве случаев вы этого не делаете. Так что используйте правильный атрибут в качестве ключа.
источник
Использование Promise с serializeUser & deserializeUser:
Пожалуйста, смотрите мой репозиторий github для полного примера кода, как решить эту проблему.
источник
в passport.use ('local-login' ...) / или / ('local-singup' ...)
если ошибаться, вы должны вернуть «false» err {return done (null, req.flash ('megsign', 'Имя пользователя уже существует #! #'));} true {return done (null, false, req.flash (' megsign ',' Имя пользователя уже существует #! # '));}
источник