【问题标题】:ExpressJS - make route accessible only from internal redirectExpressJS - 使路由只能从内部重定向访问
【发布时间】:2020-11-29 22:40:15
【问题描述】:

我有一个 ExpressJS 应用程序,其中包含一些我不想在输入 url 时使用的路由,只有当我从我的代码重定向到它们时它们才应该起作用。

意思是,如果用户键入“myapp.com/url”,它应该不起作用。但是如果我在我的代码中添加 res.redirect("/url") ,它就可以工作

【问题讨论】:

  • 为什么需要这种方式的解决方案?如果这是同一个服务,您可以使用内部方法。不要为此公开 API。

标签: javascript node.js express routes


【解决方案1】:

基本上你不能阻止客户端向端点发送 HTTP 请求(你不能让它“不工作”)。话虽如此,您的要求与使用 JWT 的登录逻辑没有什么不同。

您可以使用 JWT 设置客户端可以访问哪些端点。如果客户不被允许,您会将他重定向到不同的页面。

见:https://github.com/auth0/express-jwt

更新(见 cmets): 提交表单时,您应该为请求生成一个 UUID。此 UUID 将是代表临时资源(视频)的令牌。

这就是 API 或多或少的样子。

  1. POST /submit
  2. GET /generated/:UUID
  3. GET /download/:UUID

您需要实现一些逻辑来管理这个临时资源。

【讨论】:

  • 客户端应该可以访问 URL,但只有当我的代码重定向到它时。如果用户单击一个按钮,它应该将他重定向到该页面。但如果他在搜索栏中输入网址,则不会。我可以用这个库来做吗?
  • 您混淆了前端和后端逻辑。如果您在用户有正确预感的情况下显示按钮,您应该使用 JWT。但是您必须在前端具有启用/禁用按钮的逻辑。
  • 这个按钮应该一直处于启用状态。我的应用程序基本上是这样的:有一个用户上传 json 文件的表单。如果 json 文件有效,则会通过库创建视频。然后视频就可以下载了。它是这样的:/ -> /submit -> /generate -> /download。 /submit 仅是 POST,因此无法从搜索栏中访问,但我希望 /generate 和 /download 由于显而易见的原因不可访问。
【解决方案2】:

这是不可能的,因为 res.redirect (https://expressjs.com/en/4x/api.html#res.redirect) 接受通过 URL 已经可用的路由。如果您不想将路由发布到外界,您可以在显示或发送数据之前进行某种授权。

【讨论】:

    猜你喜欢
    • 2022-11-02
    • 2018-09-12
    • 2021-05-21
    • 1970-01-01
    • 2016-02-14
    • 2018-01-01
    • 1970-01-01
    • 2015-02-26
    • 2014-11-15
    相关资源
    最近更新 更多