我开始使用node.js,express和mongodb规划REST API.API为网站(公共和私人区域)以及稍后的移动应用程序提供数据.该前端将与AngularJS一起开发.
有些日子我读了很多关于保护REST API的内容,但我没有找到最终的解决方案.据我所知,使用HTTPS提供基本的安全性.但是我如何在该用例中保护API:
只允许网站/应用的访问者/用户获取网站/应用的公共区域的数据
只允许经过身份验证和授权的用户获取私有区域的数据(并且只有用户授予权限的数据)
目前我认为只允许具有活动会话的用户使用API.为了授权用户,我将使用护照并获得许可,我需要为自己实施一些内容.全部在HTTPS之上.
有人可以提供一些最佳实践或经验吗?我的"架构"是否缺乏?
我已经写了一个timepicker指令,在那里我可以输入时间,如果我点击Enter该值将以特定的时间格式格式化.输入也会模糊.一切正常.
问题是我在ng-click指令的表单中也有一些按钮.如果我点击Enter,ng-click指令的动作也将被调用.虽然我跑了e.preventDefault();
这是我的指令的代码:
$element.keyup(function(e) {
var keyCode = e.keyCode || e.witch;
if (keyCode == 13) {
$element.blur();
// Do some more stuff here
e.preventDefault();
return false;
}
});
Run Code Online (Sandbox Code Playgroud)
和HTML代码:
<button class="btn btn-default" ng-click="openModal()">
<i class="icon-info-sign"></i>
</button>
Run Code Online (Sandbox Code Playgroud)
有趣的是,该timepicker指令按预期工作,并且openModal()将调用该函数.我该如何防止这种情况?
如果将新对象插入数据库,我只需要socket.io向客户端发送消息.所以我的想法是直接从我的控制器的插入方法发出消息.在我的server.js文件中,iam创建了socket.io对象并尝试使其可供其他模块访问:
var server = require('http').createServer(app);
var io = require('socket.io').listen(server);
//make socket io accessible for other modules
module.exports.io = io;
Run Code Online (Sandbox Code Playgroud)
在我的控制器中,我尝试使用socket.io这样:
var io = require('../server').io;
...
io.sockets.on("connection", function(socket){
passportSocketIo.filterSocketsByUser(io, function (user) {
return user.workingAt === socket.handshake.user.workingAt;
}).forEach(function(s){
s.send("news", insertedObject);
});
});
Run Code Online (Sandbox Code Playgroud)
我坚持到这里.永远不会触发"连接"事件,因此不会发出消息.这是在单独的文件中使用socket.io的正确方法吗?不幸的是我无法找到复杂的socket.io示例.
我计划开发一个公共区域和私人区域的网站.该站点的两个区域都将是使用AngularJS实现的单独的单页应用程序.我使用Node.js为前端创建REST Web服务.
私有区域只能通过身份验证(用户名/密码)访问.此外,还需要进行身份验证以调用REST API调用.
公共区域的文件将存储在子文件夹/ public中,以及子文件夹/ private中的私有文件夹的文件.我使用nginx为公共区域提供静态文件.我还想用nginx提供私有区域的静态文件.
如何阻止用户直接访问文件,如www.example.com/private/js/app.js
只有经过身份验证的用户才能打开/ private文件夹中的文件.
authentication nginx restriction node.js single-page-application
我试图按嵌入文档的日期对某些文档进行排序.我的文件看起来像:
[
{
name: 'item1',
slots: [
{
date : ISODate("2013-01-18T23:00:00Z")
},
{
date : ISODate("2013-02-05T23:00:00Z")
},
{
date : ISODate("2013-03-24T23:00:00Z")
},
]
},
{
name: 'item2',
slots: [
{
date : ISODate("2013-01-12T23:00:00Z")
},
{
date : ISODate("2013-01-03T23:00:00Z")
},
{
date : ISODate("2013-03-04T23:00:00Z")
},
]
},
{
name: 'item3',
slots: [
{
date : ISODate("2013-03-14T23:00:00Z")
},
{
date : ISODate("2013-02-18T23:00:00Z")
},
{
date : ISODate("2013-03-07T23:00:00Z")
},
]
}
]
Run Code Online (Sandbox Code Playgroud)
我需要slot.date升序排序的结果.所以结果应该是这样的:
[
{
name: 'item2',
slots: [
{
date : ISODate("2013-01-03T23:00:00Z") …Run Code Online (Sandbox Code Playgroud)