next.js 如何在边缘路由netlify请求,以获取具有不同权限要求的缓存资源?

ilmyapht  于 2023-08-04  发布在  其他
关注(0)|答案(1)|浏览(95)

我有一个NextJS应用程序,它在Netlify上运行,并从无头CMS中提取数据。在CMS中,您可以将文章标记为:

  • 免费的
  • 您必须登录
  • 您必须有付费订阅

如果您的账户级别不符合要求,您将通过付费墙来满足您。因此,每个post都有一个或两个不同的缓存版本:

  • 其中一个免费的(内容版本)
  • 两个用于其他类型(一个具有付费墙的版本和一个具有内容的版本)。

我在NextJS中的结构看起来像这样:

- pages
 | ...
 | - articles
    | - [slug]
       | - index.ts   <- Renders paywall or content if not no paywall required
       | - content.ts <- only exists if content is not free, otherwise 404
 | ...

字符串
我的方法是在登录时设置一个JWT,其中包含用户是否拥有付费订阅的信息。这样我就知道了这三种状态:

  • 没有cookie ->未登录
  • 在边缘上使用Cookie -> Decode cookie并检查JWT中的相应键

然而,我不知道如何确定用户的级别是否足以在不调用应用程序的情况下查看帖子。我如何知道职位的要求?如果存在cookie,我可以在幕后重写请求为/content,但我不知道它是否只需要登录或付费订阅。此外,我将不得不处理404情况下,如果content.ts不存在,如果其自由。我相信一定有更好的设计。
如果您有更好的建议,也可以更改文件结构。

kyvafyod

kyvafyod1#

虽然我不熟悉Netifly的最佳实践,但我可以提供一个两步解决方案,该解决方案可能会根据您的具体实施而起作用。保持您的文件结构,因为它适合您的需要。
我假设你有存储在cookie中的JWT?

  1. Lambda functions如果您熟悉Next.js中的无服务器函数,则可以将其设置为“伪路由”,以验证和解码来自cookie的传入JWT。这将在不与应用程序交互的情况下检查用户访问。
  2. _redirects Netify在文件目录系统中内置了重定向支持。只需在需要时将受保护的请求重定向到lambda函数。
    这允许您在需要时返回404或内容。

相关问题