问题
i use console.log(user.id) in serialize it show user id when i login but in browser when i go in application, session storage is empty. it not show any key and value
Passport.js
const LocalStrategy = require('passport-local').Strategy
const mongoose = require('mongoose')
const bcrypt = require('bcrypt')
const User = require('../models/User')
module.exports = function(passport) {
passport.use("local",
new LocalStrategy({usernameField:"email"}, (email, password, done)=>{
User.findOne({email:email})
.then(user=>{
if(!user){
return done(null, false,{message:"That email is not registered"})
}
bcrypt.compare(password, user.password, (err, isMatch)=>{
if(err) throw err
if(isMatch){
return done(null, user)
}else {
return done (null, false,{message:"password incorrect"})
}
})
})
.catch(err=>console.log(err))
})
)
passport.serializeUser(function (user, done) {
done(null, user.id)
})
passport.deserializeUser(function (id, done) {
User.findById(id, function (err, user) {
done(err, user)
})
})
}
Login.js
router.post('/login', function(req, res, next) {
passport.authenticate('local', function(err, user, info) {
if (err){
return next(err);
}
if (!user) {
return res.redirect('/login');
}
req.logIn(user, function(err) {
if (err) { return next(err); }
req.session.isLoggedIn = true
req.session.user = user
req.session.save(err=>{
console.log(err)
return res.redirect('/');
})
});
})
(req, res, next);
});
app.js
const session = require('express-session')
const passport = require("passport");
require('./config/passport')(passport)
app.use(bodyParser.urlencoded({extended : false}))
//express session
app.use(session({
secret:'secret',
resave: false,
saveUninitialized: true,
}))
app.use(passport.initialize())
app.use(passport.session())
回答1:
You will find in application/cookies under connect.sid the first part of it is the session id and the second part is what passport adds for serialization, if you delete the cookie you won't notice any difference unless you use a middleware to restrict access to the page only when you are logged in
来源:https://stackoverflow.com/questions/62553889/session-not-create-after-login-using-passport-js