【问题标题】:Best strategy for public sharing for the pages which are protected by passportjs受passportjs保护的页面公开共享的最佳策略
【发布时间】:2021-12-03 03:41:15
【问题描述】:

我是整体开发的初学者。我在我的 nodejs 项目中使用 Mongostore 的 passportjs 身份验证(本地和 Google 策略)。基本上,用户在他们的私人帐户中创建一个只有他们可以查看和编辑的简单页面。我需要为他们提供一个选项,以便让公众可以查看此页面。 (即:让有链接的人看到这个页面)

我搜索了它,似乎不可能有条件地使用 ensureAuth 中间件。我最好的想法是:

  1. 通过 ensureAuth 中间件检查用户是否通过身份验证(这是我的 atm)
  2. 如果未通过身份验证,请检查此页面是否可供公众使用
  3. 如果可以公开使用,请只发回不敏感的数据。

对我来说,用所有路线实现这一点似乎并不实际。

我正在使用 ensureAuth 中间件来保护我的路由:

router.post('/', ensureAuth, async (req, res) => {
    const newBlend = new Blend({ ...req.body, user: req.user[0]._id })

    try {
        await newBlend.save()
        res.send(newBlend)
    } catch (err) {
        if (err.name === 'ValidationError') {
            return res.status(400).send(
                Object.values(err.errors)
                    .map((val) => val.message)
                    .toString()
            )
        }
        res.status(400).send(err.message)
    }
})

我的问题是:针对上述情况的最佳策略是什么?如何通过最少的重构来实现这一目标?

由于我处于项目的开始阶段,我想在为时已晚之前为这个场景构建所有内容。

提前感谢您的帮助!

【问题讨论】:

    标签: node.js authentication passport.js


    【解决方案1】:

    我不确定我是否正确,但我认为您的意思是要避免每条路线的重复(每条路线的参数中都有ensureAuth)?

    您可以使用router.use(ensureAuth); 以及您希望包含在每个请求中的所有其他中间件。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-02-13
      • 2012-02-09
      • 1970-01-01
      • 2014-02-07
      • 1970-01-01
      • 1970-01-01
      • 2011-09-02
      相关资源
      最近更新 更多