javascript - 迁移到 Sails.js 0.12 - 中间件迁移

标签 javascript node.js sails.js

我正在将一个用 0.10.5 编写的旧 sails.js 项目迁移到 0.12.x。 由于原始代码是很久以前编写的,可能有一些“不合格”的代码,我决定通过启动一个新的 sails 项目并缓慢迁移模型/ Controller /服务,同时仅保留必要的策略和配置来重新构建该项目文件。

到目前为止,我成功地完成了该项目,现在我开始处理身份验证问题。理想情况下,我打算转而使用 Passport 和 jwt 来取代现有的express-jwt。

我的旧 config/http.js 看起来像这样:

module.exports.http = {
    bodyParser: function() {
        //return require('body-parser')({limit: '900mb'});
        var opts = { limit:'50mb' };
        var fn;

        // Default to built-in bodyParser:
        fn = require('skipper');
        return fn(opts);
    },
    customMiddleware: function(app) {

        var bodyParser = require('body-parser');
        var expressJwt = require('../libs/express-jwt');
        var experssJwtConfig = require('./jwt.js').jwt;

        app.use(function(req, res, next) {
            res.setHeader("Access-Control-Allow-Origin", "*");
            next();
        });

        app.use('/api', expressJwt({secret: experssJwtConfig.secret}));

        app.use(bodyParser.json());
        app.use(bodyParser.urlencoded());

        if(process.env.NODE_ENV == 'development') {
            // just for local/development - serve static files      
        }
    }
}

如果我理解正确(我不太熟悉堆栈),此代码将覆盖默认的正文解析器(使用允许大文件的船长 - 这是在 bodyParser 中指定的),此外,还会更改使用的中间件:

  • 包含一个中间件以添加 Access-Control-Allow-Origin

  • 对于“api”下的路由,它会调用express-jwt中间件,该中间件在此实现中(不确定这是默认行为)查找 token ,然后将用户添加到请求对象(然后在大多数 Controller )。

  • 将正文解析器 (body-parser) jsonurlencode 添加到中间件链。

我的问题是我应该保持它或多或少相同还是应该改变它?是否存在任何明显的反模式或安全风险?如果我使用skiper,我需要body parser json/urlencode中间件吗?

我是否能够使用更标准的护照/jwt 代码实现类似的流程?如果是这样,我可以使用 sails-auth 实现这种堆栈还是我应该自己发挥作用?

最佳答案

是的,您可以删除自定义中间件。最新的模式更容易管理。对于初学者来说,

  • Access-Control-Allow-Origin可以设置为config/cors.js

  • 您可以使用passport-jwt通过利用 sails-auth 以更 sails 的方式模块。并将逻辑分为 services ,使用policies管理流量等。 sails-auth 的问题也就是说,npm 中的模块已经发布一年多了。它有几个错误。 GitHub 存储库有稳定版本。

我在 sails 中制作了一个最低限度的身份验证服务器,您可以将其扩展用于各种护照策略。服务器支持local , bearer , JWT开箱即用的策略。

Sails Auth Server

关于javascript - 迁移到 Sails.js 0.12 - 中间件迁移,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42229717/

相关文章:

node.js - Angular-cli:ng 新的 my-dream-app 错误

node.js - 如何使用 Sails.js、sails-mong 和 Mongo DB 重命名数据库架构中的所有字段

javascript - 试图了解 jquery on events 之间的区别

javascript - 等待 bluebird Promise 内的可选流程操作

javascript - 来自 NodeJs Crypto 和 CryptoJS 库的不同加密值

javascript - DataURL 通过 AJAX 发送至 sails 端点

mysql - findOne({键 :value}) or findOne(). 其中({键 :value}) when querying database with waterline?

javascript - 如何使用 OpenLayers 限制现有多边形内的绘制

javascript - 悬停时CSS使图像变暗-在其周围添加一个href

javascript - 需要通过元素onclick函数停止执行Javascript onclick函数