【问题标题】:Migrating to Sails.js 0.12 - middleware migration迁移到 Sails.js 0.12 - 中间件迁移
【发布时间】:2017-02-14 15:15:01
【问题描述】:

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

到目前为止,我设法让项目解除,现在我开始处理身份验证。理想情况下,我打算使用带 jwt 的护照来替换现有的 express-jwt。

我的旧配置/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 中间件,该中间件在此实现中(不确定它是否是默认行为)查找令牌,然后将用户添加到请求对象(然后用于大多数控制器)。

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

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

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

【问题讨论】:

    标签: javascript node.js sails.js


    【解决方案1】:

    是的,您可以删除自定义中间件。最新模式更易于管理。首先,

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

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

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

    Sails Auth Server

    【讨论】:

    • 哇,这是一个非常全面的例子——我会花一些时间来整理它:-)。我在 package.js 中没有看到sails-auth 你用过吗?从简短的回顾来看,我不确定护照是如何连接的......有没有任何资源可以帮助理解所有这些是如何协同工作的?
    • UserController.jsAuthController.jsServices/passport.jsServices/protocols 都是sails-auth 文件。由于 npm 中的模块已过时,我不得不直接将其添加到项目中。如果有帮助,我可以更新自述文件。
    • 我实际上尝试了sails-auth,但它似乎没有做出任何改变。如果您可以在自述文件中添加手动安装步骤或一些额外的操作信息,那就太好了......
    • 这可能会对您有所帮助。 thenullpointer.in/2017/02/15/…
    • 谢谢 - 这个链接很有帮助。我安装并运行了sails-auth,看到了影子模型/控制器/服务的“创建”,这让我很困惑,因为我需要以某种方式改变行为......手动添加文件意味着我必须在后续更新中替换文件(其中如果我实现自定义行为可能会有问题)......也许sails-auth对我来说太固执了,如果它不容易配置(而不是重新编码)并且没有维护 - 也许不是最适合......案例,感谢您的帮助!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-12
    • 2017-06-26
    • 1970-01-01
    • 2018-01-10
    • 1970-01-01
    相关资源
    最近更新 更多