我正在尝试从当前会话中捕获用户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,以便删除登录的个人资料。谢谢!
答案 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,而是从用户那里收到电子邮件,如果您已正确设置用户架构,则该电子邮件在您的数据库中也是唯一的。
我希望这会有所帮助, 干杯