有人能指出我在ExpressJS应用程序中如何处理AJAX调用的正确方向吗?
我有一个Jade模板,它引用一个外部JavaScript文件来处理向我服务器上的端点发送请求。现在,可以在没有任何身份验证的情况下访问相同的端点(显然)。
// Sample AJAX call in my client-side JavaScript file (which dynamically updates a chart)
$.ajax({
url: 'https://example.com/jsonp?callback=?',
jsonpCallback: 'callback',
dataType: 'jsonp',
data: {
startDate: formatDate(fromDate, ''),
endDate: formatDate(toDate, '')
},
success: function(response){
//generateChart(processData(response));
}
我知道Express可以将对象/变量传递给Jade模板,但是Jade模板可以将这些传递给包含的脚本吗?我的预感可能不是......
我可以在Express中对我的/ jsonp端点进行修改,以便它只接受来自mysite.com和localhost的请求吗?在客户端JavaScript中嵌入数据(例如身份验证凭据或API密钥)似乎是一种糟糕的方式。
// Route definition in Express
router.get('/jsonp', function(req, res){
var obj = {"_id": "234e62ASFsdsds", "name": "An object", "status": "READY"};
var callbackFunction = (req.query.callback) ? req.query.callback : 'cb';
res.send(wrapJSONP(callbackFunction, obj));
})
或者我咆哮错误的树,需要完全考虑不同的方法?
答案 0 :(得分:0)
如果您将端点设置为直接JSON(而不是JSONP,这种设计可以轻松绕过公共API的跨域安全性),则Access-Control-*
系列标头(CORS headers)是要完全按照自己的意愿去做。浏览器本身将强制执行此操作并阻止来自不匹配域的任何AJAX请求。
具体来说,您需要两个Access-Control-Allow-Origin
标头,其中http://yoursite.com
和http://localhost
为值。
使用JSONP,你唯一可以做的就是在返回脚本之前查看服务器端的Referer
标题 - 但这是不可靠的,也很容易被欺骗。