Angularjs 使API端点私有化

Angularjs 使API端点私有化,angularjs,node.js,api,express,passport.js,Angularjs,Node.js,Api,Express,Passport.js,我正在用AngularJS、express、nodejs和Passportjs开发一个小Web应用程序。我一直在按需在API上创建端点,但现在我遇到了一个问题。 我有一个端点,用户需要时无法调用它。此API调用是在用户在应用程序中执行特定操作时进行的,因此他们可以获得积分。 端点类似于/api/users/updatePoints,我不希望使用开发人员工具的用户重新发送调用并获得他们不应得的分数。 我怎样才能做到这一点?我已经考虑了一天,但我想不出任何合理的办法 提前感谢您: -编辑- 最后,我

我正在用AngularJS、express、nodejs和Passportjs开发一个小Web应用程序。我一直在按需在API上创建端点,但现在我遇到了一个问题。 我有一个端点,用户需要时无法调用它。此API调用是在用户在应用程序中执行特定操作时进行的,因此他们可以获得积分。 端点类似于/api/users/updatePoints,我不希望使用开发人员工具的用户重新发送调用并获得他们不应得的分数。 我怎样才能做到这一点?我已经考虑了一天,但我想不出任何合理的办法

提前感谢您:

-编辑-
最后,我刚刚删除了该端点,并直接在服务器端的数据库中写入。不是我想要的解决方案,但已经足够好了。谢谢

现在回答已经太晚了,但我认为这可能会对某人有所帮助

要私有化端点,通过设置相应的响应头,只允许您的白名单来源,并为所有其他用户发送403状态码,这意味着禁止,401表示重试

下面是一个私有化端点的中间件示例

module.exports = function (allowedOrigins) {
   const whitelistedOrigins = Array.isArray(allowedOrigins) ? allowedOrigins : [allowedOrigins];
   return function (req, res, next) {
      const origin = req.headers.origin;
      if (whitelistedOrigins.indexOf(origin) > -1) {
         res.setHeader("Access-Control-Allow-Origin", origin);
         next();
      } else {
         res.status(403).json({
           msg: "This is a private Endpoint, Please contact the Admin",
         });
      }
   };
};
下面是一个用法示例

const privatizeEndpoint = require("../customMiddlewares/privatizeEndpoint");

router.post("/someEndpoint", privatizeEndpoint(["http://myprivate.domain.com"]), (req, res) => {
     console.log("Inside Private Endpoint");
});
但是,您的端点仍将公开,但至少它将只提供给您的白名单域


请注意,即使是没有来源的请求也会被阻止。curl命令或通过POSTMAN。

当用户在应用程序中执行特定操作时,为什么不设置一个标志,并在调用updatePoints路由时检查该标志?这可能会使它生效。如何从前端设置的my/api/users的index.js访问var?我可以在这里查看:router.post'/updatePoints',auth.isAuthenticated,controller.updatePoints;您可以在post操作中提供查询参数或数据。@Trendy这种方法的问题是,您可以随时复制它,因为这是在前端。因此,用户可以捕获到API的帖子,并随时发送它,并获得所有他想要的分数。非常感谢。这是我不喜欢SPA的地方,无论发生什么,API调用都是公开的。同意Jorge的观点,将更新点端点放在服务器端是这种方式的最佳方法。无论如何,我还是更喜欢MVC而不是SPA,jquery工作得很好,所以您不必在需要时提交和重新加载页面