" req.session.user = user"未定义用户的位置

时间:2017-02-03 23:50:51

标签: node.js session

我几乎阅读了所有可能的帖子,帖子,问题,我开始设置会话cookie,但仍然没有得到完美的解决方案。

我创建了一个Web应用程序,我想在其中设置已登录的会话cookie。

无法弄清楚"用户"未定义。我在哪里缺乏?我已经做了每一个跟踪和错误来找出错误。

App.js文件

const session = require('client-sessions');    
app.use(cookieParser());

app.use(session({
  cookieName: 'sessioncookie',
  secret: 'long_string_which_is_hard_to_crack',
  duration: 30 * 60 * 1000,
  activeDuration: 5 * 60 * 1000,
}));

Routes.js文件

 router.post('/login', (req, res) => {
            const emaild = req.body.email;
            const passd = req.body.pass;

            db.collection('check').findOne({email: emaild}, (err, result) => {
                if (err) return console.log(err);
                console.log(result.passcode);
                console.log('Retrived from database');

                bcrypt.compare(passd, result.passcode, function(err, boolean) { 
                    console.log(boolean);
                    if(boolean == true) {
                        req.session.user = user; //// It's Undefined
                        res.redirect('/dashboard');
                    } else {
                        res.send('<h1>Wrong Password</h1>');
                    }
          });
       });
    });

1 个答案:

答案 0 :(得分:1)

当您使用findOne方法查询集合时,它会返回相关文档(此处为user,您将其命名为result),您应该使用有意义的参数{{ {1}}然后user在此回调函数中可用。

当您在user上收到以下错误时:

  

无法设置属性&#39;用户&#39;未定义的

这意味着req.session.user = user;req.session。使用快递,根据请求设置undefinedsession。在这里,您正在使用client-sessions,它会在初始化时通过session middlewares选项值附加会话。所以你应该像下面那样设置它:

cookieName

请注意中间件排序很重要。您应该在设置路由之前使用中间件配置应用程序。这样,每个传入的请求都会填充您已设置的所需配置。