如何在 Local Passport 会话中传递多个参数?

How to pass multiple paramaters in Local Passport sessions?

我正在尝试将 2 个从 Mongoose 返回的变量传递到 'done' 字段以从 EJS 页面访问它。我让它与 1 个变量一起工作,但 2 个变量不起作用。我尝试将它包装在 JSON 中,但它仍然不起作用。有帮助吗?

我尝试了 2 个变量的代码:

passport.serializeUser((user, done) => {
    done(null, user.id)
})
passport.deserializeUser((id, done) => {
    User.findById(id, (err, user) => {
        Products.find({ OwnerEmail: user.email }).then((products) => {
            done(err, {user: user, products: products})
        })
    })
})

有效代码(1 个变量):

passport.serializeUser((user, done) => {
    done(null, user.id)
})
passport.deserializeUser((id, done) => {
    User.findById(id, (err, user) => {
        done(err, user)
    })
})

我对护照还很陌生。

注意 passport.deserializeUser 会将传递的对象添加到 req.user 属性。这意味着当访问用于 EJS 模板渲染的对象时,您将需要遍历 req.user 以获取预期值。

ejs.render(file, { user: req.user.user, products: req.user.products });

要清理嵌套属性,我可以尝试使用扩展语法。

举个例子:

// passport.deserializeUser
done(err, { ...user, products: products})


// Render Call
// Extract out just user data into user variable.
const user = (({ products, ...others }) => others)(req.user);
ejs.render(file, { user, products: req.user.products });