node.js - async/await 似乎不起作用 NodeJS Passport 重置密码

标签 node.js express passport.js

由于某种原因,我收到此错误:

错误:req#login 需要回调函数 在 IncomingMessage.req.login.req.logIn (/home/project/node_modules/passport/lib/http/request.js:47:44) 在exports.update(/home/project/controllers/authController.js:92:13) 在 process.internalTickCallback (内部/process/next_tick.js:77:7)

使用此代码:

exports.update = async (req, res) => {
  const user = await User.findOne({
  resetPasswordToken: req.params.token,
  resetPasswordExpires: { $gt: Date.now() }
  });

  if (!user) {
    req.flash('error', 'Password reset is invalid or has expired');
    return res.redirect('/login');
  }

  const setPassword = promisify(user.setPassword, user);
  await setPassword(req.body.password);
  user.resetPasswordToken = undefined;
  user.resetPasswordExpires = undefined;
  const updatedUser = await user.save();
  await req.login(updatedUser);
  req.flash('success', 'Your password has been reset! You are now 
logged in!');
  res.redirect('/');
};

我做错了什么?我想不通..

最佳答案

根据错误消息,req.login(updatedUser); 期望回调作为第二个参数。基本上,你会做这样的事情:

req.login(updatedUser, function(err, data) {
  // handle err and data
});

但是,由于您希望在此异步操作上await,因此您需要返回 promise 的东西。基本上,您可以等待任何 promise 值(并且 login 不会返回一个值。

您可以围绕此调用构建一个 promise ,如下所示:

await new Promise(function(res, rej) {
  req.login(updatedUser, function(err, data) {
    if (err) rej(err);
    else res(data);
  });
})

Node.JS 附带了一个名为 promisify 的辅助函数如果您不想每次都手动执行此操作,可以帮助构建此行为。

关于node.js - async/await 似乎不起作用 NodeJS Passport 重置密码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53356066/

相关文章:

node.js - 无法在 Facebook Graph API 上使用/apprequests 端点

javascript - 杀死 nestjs - node.js 进程丢失 redis 连接(微服务)

node.js - 向端点结果添加分页光标和附加功能

node.js - expressjs req.body.username 未定义

javascript - "TypeError: User.serializeUser is not a function"与 passport.js

javascript - 发送cookie到浏览器

node.js - 在 docker 容器中永远启动 Node 时出错

node.js - `Cannot find module` 用于我自己的 TypeScript 模块

javascript - 在nodejs/express中如何允许爬虫使用站点地图

node.js - 无法从node.js中的中间件获取 session 数据