小编tsc*_*ela的帖子

如何使用node.js实现安全的REST API

我开始使用node.js,express和mongodb规划REST API.API为网站(公共和私人区域)以及稍后的移动应用程序提供数据.该前端将与AngularJS一起开发.

有些日子我读了很多关于保护REST API的内容,但我没有找到最终的解决方案.据我所知,使用HTTPS提供基本的安全性.但是我如何在该用例中保护API:

  • 只允许网站/应用的访问者/用户获取网站/应用的公共区域的数据

  • 只允许经过身份验证和授权的用户获取私有区域的数据(并且只有用户授予权限的数据)

目前我认为只允许具有活动会话的用户使用API​​.为了授权用户,我将使用护照并获得许可,我需要为自己实施一些内容.全部在HTTPS之上.

有人可以提供一些最佳实践或经验吗?我的"架构"是否缺乏?

rest node.js express passport.js

199
推荐指数
5
解决办法
11万
查看次数

点击输入时阻止点击动作

我已经写了一个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()将调用该函数.我该如何防止这种情况?

jquery angularjs

23
推荐指数
1
解决办法
7026
查看次数

在控制器中使用socket.io

如果将新对象插入数据库,我只需要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示例.

node.js socket.io

20
推荐指数
2
解决办法
1万
查看次数

如何使用node.js保护单页面应用程序中的静态文件

我计划开发一个公共区域和私人区域的网站.该站点的两个区域都将是使用AngularJS实现的单独的单页应用程序.我使用Node.js为前端创建REST Web服务.

私有区域只能通过身份验证(用户名/密码)访问.此外,还需要进行身份验证以调用REST API调用.

公共区域的文件将存储在子文件夹/ p​​ublic中,以及子文件夹/ p​​rivate中的私有文件夹的文件.我使用nginx为公共区域提供静态文件.我还想用nginx提供私有区域的静态文件.

如何阻止用户直接访问文件,如www.example.com/private/js/app.js

只有经过身份验证的用户才能打开/ private文件夹中的文件.

authentication nginx restriction node.js single-page-application

5
推荐指数
1
解决办法
1408
查看次数

按嵌入文档排序

我试图按嵌入文档的日期对某些文档进行排序.我的文件看起来像:

[
    {
        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)

sorting mongodb mongovue

3
推荐指数
1
解决办法
5470
查看次数