【问题标题】:Koa Passport authenticateKoa Passport 认证
【发布时间】:2020-01-20 20:07:02
【问题描述】:

我正在使用 Koa、koa-passportpassport-localkoa-joi-router 制作一个简单的注册应用程序,它仅用于验证 body json。示例建议像这样使用passport.authenticate

router.route({
  method: 'post',
  path: '/signup',
  validate: {
    type: 'json',
    body: {
      username: Joi.string().required(),
      password: Joi.string().required()
    }
  },
  async handler(ctx, next) {
    const body: {
      username: string,
      password: string,
    } = ctx.request.body;

    try {
      await User.createAndSave(body.username, body.password);
      return passport.authenticate('local', async (error, user, info, status) => {
        if(error) {
          ctx.throw(500);
        } else if(user) {
          await ctx.login(user);
        } else {
          ctx.throw(400);
        }
      })(ctx, next);
    } catch {
      ctx.throw(500);
    }
  }
}

如您所见,我首先将用户输入到我的数据库中,然后调用passport.authenticate,但奇怪的是,不要将用户的用户名或密码传递给它。那么该函数应该如何知道我希望它找到哪个用户呢?

【问题讨论】:

  • 您没有在此代码中找到任何用户。这是一个用户注册示例,其中用户名和密码被发送到路由以作为请求正文的一部分进行注册。有意义吗?
  • @Shumail 但是该函数如何知道我如何命名这些字段。例如,它可以是 admin_username 而不是用户名。另外,当第一次调用(User.createAndSave)完成时,用户在我的数据库中,所以必须在 passport.authenticate 上找到一些发现,对吧?

标签: node.js passport.js koa passport-local


【解决方案1】:

经过一番搜索,发现passport-local包中设置了用户名和密码正文字段名称。 Reference

【讨论】:

    猜你喜欢
    • 2015-10-30
    • 2016-10-03
    • 2019-11-29
    • 1970-01-01
    • 1970-01-01
    • 2021-01-14
    • 2016-04-24
    • 2020-05-02
    • 2016-06-19
    相关资源
    最近更新 更多