express-session req.user is undefined

早过忘川 提交于 2019-12-12 03:08:35

问题


I'm trying to use express session to login users. I'd like users to be able to go to a profile page and view their user data if they have logged in.

I've been stuck here for days. On line 33 of my routes.js file, in my /profile GET route, req.user is undefined. But on line 27 of my routes.js, in my /login POST, req.user works as it should.

'use strict'

var User = require('mongoose').model('User')

module.exports = function(app, passport){ 
    console.log('passport', passport)
    app.route('/')
        .get(function(req, res){
            res.render('index')
        })
    app.get('/signUp', function(req, res){
        res.render('signup')
    })

    app.route('/user')
        .get(function(req, res){
        })
        .post(passport.authenticate('local-signup', { successRedirect: '/',
                                                        failureRedirect: 'signup' }))

    app.route('/login')
        .get(function(req, res){
            res.render('login')
        })
        .post(passport.authenticate('local-login', { successRedirect: '/',
                                                    failureRedirect: '/login'}), function(req, res){
                        /* *** LINE 27 ***  */  console.log('req.user', req.user)   
                                                    })

    app.route('/profile')
        .get(function(req, res){

   /* *** LINE 33 ***  */   console.log('req.user', req.user)

            if(!req.user){
                res.render('profile', {user: "You're not logged in"})
            }   
            if(req.user){
                res.render('profile', {user: req.user})
            }
        })
}

Why isn't req.user defined in all my routes? Shouldn't express session populate a persisting req.user object?

Any help appreciated. Thanks!


回答1:


You should define isLoginedIn funtion in routes.js as follow:

 // route middleware to ensure user is logged in
function isLoggedIn(req, res, next) {
    if (req.isAuthenticated())
        return next();

    res.redirect('/');
}

Then replace:

   app.route('/profile')
        .get(function(req, res){

            console.log('req.user', req.user)

            if(!req.user){
                res.render('profile', {user: "You're not logged in"})
            }   
            if(req.user){
                res.render('profile', {user: req.user})
            }
        })

by:

 // PROFILE SECTION =========================
    app.get('/profile', isLoggedIn, function(req, res) {
        res.render('profile.ejs', {
            user : req.user
        });
    });


来源:https://stackoverflow.com/questions/34477443/express-session-req-user-is-undefined

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