【问题标题】:Should I pass async function to passport.deserializeUser()?我应该将异步函数传递给 passport.deserializeUser() 吗?
【发布时间】: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


    【解决方案1】:

    想到的第一个解决方案:

    passport.deserializeUser((id, done) => {
        getUserById(id).then(user => done(null, user))
    };
    

    即,使用then() 处理承诺。不知道deserializeUser会不会带异步回调函数。我确实知道一些像 useEffect 这样的函数在 React 中不知道。

    【讨论】:

      猜你喜欢
      • 2020-08-03
      • 1970-01-01
      • 1970-01-01
      • 2015-12-01
      • 2022-12-22
      • 2021-12-29
      • 2012-12-10
      • 2017-01-06
      • 1970-01-01
      相关资源
      最近更新 更多