如果只有本地Angular App将其称为控制器,则执行路由

时间:2015-05-14 00:00:56

标签: javascript angularjs node.js express

我有一些API路由,只有应用程序本身(controller.js)才能访问。有没有办法使用IP地址(可能因为欺骗而不安全)来创建限制谁使用api的这一部分?

服务器大小(server.js)

app.get("/api/specs",function(req,res){
    // Only the app should have access to it, not external entities
    res.json({used:getUsed()});
});

客户端(controller.js)

$http.get('/api/specs').success(function(specs,code){
    console.log(specs);
});

2 个答案:

答案 0 :(得分:1)

默认情况下,您的浏览器不允许您发出跨站点HTTP请求,因为它是same origin policy的主题。

注意:

  

特别是,这意味着使用XMLHttpRequest的Web应用程序   只能向它加载的域发出HTTP请求,并且   而不是其他领域。

在您的情况下,只有api的同一域中的js才能访问它们。

如果我想将API的使用扩展到其他域,该怎么办?

在这种情况下,您必须在后端api设置Access-Control-Allow-Origin标题。

例如:

// Cross-site HTTP requests from http://siteA.com
Access-Control-Allow-Origin: http://siteA.com

// Cross-site HTTP requests from all
Access-Control-Allow-Origin: *

如果您想调试此行为,您只需打开firebug并在网络中检入请求的标头。

<强>参考文献:
https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS
https://developer.mozilla.org/en-US/docs/Web/Security/Same-origin_policy

答案 1 :(得分:0)

我认为使用GET参数是最简单的方法。

Node.js的(表达)

app.get("/api/specs",function(req,res){
  var queryParam = url.parse(req.url,true).query
  if(queryParam.whois == "yourUniqueName"){
    res.send("okay");
  }else{
    res.status(404);
    res.send("NG");
  }
});

$http.get("/api/specs", {
    params: { whois: "yourUniqueName" }
});

为每个API定义唯一的名称。 并且只有在客户端发送正确的名称时才设置服务器返回响应。

服务器返回404,除了您将yourUniqueName作为查询参数whois传递。

/api/specs?whois=yourUniqueName
okay

/api/specs?whois=otherName
/api/specs?otherParam=something
/api/specs
NG