【发布时间】:2022-04-16 08:18:15
【问题描述】:
我正在使用passport 来处理用户身份验证。在初始化期间,我必须执行以下操作来管理会话 cookie:
passport.serializeUser((user, done) => done(null, user.ID));
passport.deserializeUser((id, done) => done(null, getUserById(id)));
这里,我已经将用户存储在我的数据库中,所以getUserById是一个异步函数,定义如下:
const getUserById = async (id) => {
result = await executeQuery(`SELECT ID, USERNAME, PASSWORD FROM STUDENTS WHERE ID=:id`, [id]);
if (result.rows.length != 0) return result.rows[0];
else return null;
};
这里,getUserById(id) 函数不会立即返回查询执行的结果,它会返回一个promise。将此getUserById() 函数传递给done() 的正确方法是什么?
- 我应该将
getUserById(id)包装在另一个 IIFE 异步函数中吗? - 或者我应该执行以下操作?
passport.deserializeUser(async (id, done) => {
const user = await getUserById(id);
done(null, user);
});
【问题讨论】:
标签: serialization async-await passport.js session-cookies