session not create after login using passport .js

微笑、不失礼 提交于 2020-06-28 04:13:24

问题


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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!