无法从会话快递获取用户ID

时间:2019-06-03 14:12:52

标签: node.js express mongoose pug

我正在尝试从当前会话中捕获用户ID,以便进行删除配置文件功能。 我正在使用带有快速会话,猫鼬和护照的Express。

我用来删除用户的代码确实有效,我已经将ID从我的mongo数据库中复制到了代码中,并且它们删除得很好。问题必须在捕获ID。

在我的一个.pug文件中使用以下代码时,我实际上可以检索用户ID:

ID:#{user.id} //输出:“ 5cf51df175eb3842c461f9ae”

我已经在github @ https://github.com/LarsBreuren/Muzika

上找到了该项目。

这是我的删除函数,出现错误:“无法读取未定义的属性'_id'”。当我从mongoDB的const id中插入一个ID时,它可以正常工作,所以我的猜测是req.session.user._id无效

router.get('/delete', (req, res) => {
  const id = req.session.user._id
  User.findOneAndRemove({_id: id }, (err) => {
    if (err) {
      console.log(err)
      res.status(500).send()
    } else {
      console.log('User removed')
      return res.status(200).send()
    }
  })
})

这些是我用于护照的摘录:


passport.serializeUser(function(user, done) {
  done(null, user.id);
});

passport.deserializeUser(function(id, done) {
  User.getUserById(id, function(err, user) {
    done(err, user);
  });
});

这是我的会话设置:

app.use(session({
  resave: false,
  saveUninitialized: true,
  secret: 'ilikecats',
}));

我希望在const ID中获取用户ID,以便删除登录的个人资料。谢谢!

2 个答案:

答案 0 :(得分:0)

“无法读取未定义的属性'_id'”表明'user'不是请求对象中'session'的元素,或者您期望的值未随请求一起传递。我建议运行调试器,并在声明常量的那一行查看请求对象中的内容。您应该看到数据并没有按照您认为的那样来传递。在这里,您可以比较接收到的数据和期望的数据,并调整输入。

希望这会有所帮助。 :)

答案 1 :(得分:0)

我遇到了同样的问题,这并不是您正在寻找的解决方案,但这是该问题的替代解决方案。在我的应用程序视图中,我要求用户输入电子邮件以确认他们要删除其帐户。

In the front-end: 'removeUser.ejs'

<form action="/removeuser" method="POST">
   <label>E-mail</label> 
      <input type="text" name="email">
    <br>
  <button type="submit">Eliminar Usuario</button>
</form>

//这是从我的视图获取输入的控制器:

const User = require('../models/User')

module.exports = async(req, res) => {
   const user = await User.findOneAndDelete({email:req.body.email}, 
(err) => {  
  if(err) {
    console.log(err)
  res.redirect('/removeUser')
      }
  })
  res.redirect('/')  
}

因此,您无需从当前会话中捕获用户ID,而是从用户那里收到电子邮件,如果您已正确设置用户架构,则该电子邮件在您的数据库中也是唯一的。

我希望这会有所帮助, 干杯