Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/403.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 快速会话请求用户未定义_Javascript_Node.js_Session_Express_Passport.js - Fatal编程技术网

Javascript 快速会话请求用户未定义

Javascript 快速会话请求用户未定义,javascript,node.js,session,express,passport.js,Javascript,Node.js,Session,Express,Passport.js,我正在尝试使用express会话登录用户。我希望用户能够转到个人资料页,并查看他们的用户数据,如果他们已经登录 我被困在这里好几天了。在我的routes.js文件的第33行,在我的/profile GETroute中,req.user未定义。但是在我的routes.js的第27行,在我的/login POST中,req.user按它应该的方式工作 'use strict' var User = require('mongoose').model('User') module.exports

我正在尝试使用express会话登录用户。我希望用户能够转到个人资料页,并查看他们的用户数据,如果他们已经登录

我被困在这里好几天了。在我的
routes.js
文件的第33行,在我的
/profile GET
route中,
req.user
未定义。但是在我的
routes.js
的第27行,在我的
/login POST
中,req.user按它应该的方式工作

'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})
            }
        })
}
为什么没有在我的所有路线中定义
req.user
?express会话不应该填充持久化的
req.user
对象吗


谢谢你的帮助。谢谢

您应该在routes.js中定义isLoginedIn函数,如下所示:

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

    res.redirect('/');
}
然后替换:

   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})
            }
        })
作者:


谢谢你的回答。在isLoggedIn req.isAuthenticated中,返回false,因此此配置文件功能/路由不起作用。
 // PROFILE SECTION =========================
    app.get('/profile', isLoggedIn, function(req, res) {
        res.render('profile.ejs', {
            user : req.user
        });
    });