Saya mendapat masalah dengan modul Passport.js dan Express.js.
Ini adalah kode saya dan saya hanya ingin menggunakan login dengan hardcode untuk percobaan pertama.
Saya selalu menerima pesan:
Saya mencari banyak dan menemukan beberapa posting di stackoverflow tetapi saya tidak mendapatkan kegagalan.
Error: failed to serialize user into session
at pass (c:\Development\private\aortmann\bootstrap_blog\node_modules\passport\lib\passport\index.js:275:19)
Kode saya terlihat seperti ini.
'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');
}();
Terima kasih.
node.js
express
login
passport.js
passport-local
pengguna2244925
sumber
sumber
serializeUser
fungsi menyimpan hanya id pengguna di sesi, dandeserializeUser
menggunakan id itu untuk mengambil data pengguna dari database (misalnya). Ini untuk mencegah penyimpanan sesi berisi data pengguna aktual itu sendiri.Jika Anda memutuskan untuk tidak menggunakan sesi, Anda dapat mengatur sesi menjadi false
sumber
Kedengarannya seperti Anda melewatkan bagian dari pengaturan paspor, khususnya dua metode ini:
Saya menambahkan sedikit tentang
._id
vs..id
tetapi cuplikan ini dari Bagian Konfigurasi dokumen, berikan yang lain baca dan semoga berhasil :)sumber
Di sini cara yang bekerja tetapi masih malas untuk menggunakan sesi dan masih "membuat serialisasi" nilai-nilai.
dalam kasus atau kesalahan aneh tanyakan pada diri sendiri: "Apakah saya hanya mengatur '_id' di objek pengguna saya?" - dalam kebanyakan kasus Anda tidak. Jadi gunakan atribut yang tepat sebagai kunci.
sumber
Menggunakan Promise dengan serializeUser & deserializeUser:
Silakan lihat repo github saya untuk contoh kode lengkap bagaimana mengatasi masalah ini.
sumber
di passport.use ('local-login' ...) / atau / ('local-singup' ...)
jika err Anda harus mengembalikan "false" err {return done (null, req.flash ('megsign', 'Nama pengguna sudah ada #! #'));} true {return done (null, false, req.flash (' megsign ',' Nama pengguna sudah ada #! # '));}
sumber