【问题标题】:express-session req.user is undefinedexpress-session req.user 未定义
【发布时间】:2016-04-01 08:29:27
【问题描述】:

我正在尝试使用快速会话来登录用户。我希望用户能够转到个人资料页面并查看他们的用户数据(如果他们已登录)。

我已经被困在这里好几天了。在我的routes.js 文件的第 33 行,在我的/profile GET 路由中,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?表达会话不应该填充持久的req.user 对象吗?

任何帮助表示赞赏。谢谢!

【问题讨论】:

    标签: javascript node.js session express passport.js


    【解决方案1】:

    你应该在 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})
                }
            })
    

    作者:

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

    【讨论】:

    • 感谢您的回答。在 isLoggedIn req.isAuthenticated 中返回 false,因此此配置文件功能/路由不起作用。 gist.github.com/anonymous/…
    猜你喜欢
    • 2014-08-08
    • 1970-01-01
    • 2019-08-13
    • 1970-01-01
    • 2020-10-30
    • 2018-02-23
    • 1970-01-01
    • 2020-08-08
    • 1970-01-01
    相关资源
    最近更新 更多