如何在Sails中使用http-auth

我已经将Sails应用程序部署到了PaaS,我想要简单的密码保护,以便没有人可以访问我的登台服务器。

什么是最简单的方法来做到这一点?

看起来像http-auth ,文档解释了如何实现ExpressJS,但与SailsJS我没有findapp.use()

我所尝试过的

在我的policies.js文件中

 module.exports.policies = { // '*': true, '*': require('http-auth').basic({ realm: 'admin area' }, function customAuthMethod (username, password, onwards) { return onwards(username === "Tina" && password === "Bullock"); }), 

这导致

 info: Starting app... error: Cannot map invalid policy: { realm: 'admin area', msg401: '401 Unauthorized', msg407: '407 Proxy authentication required', contentType: 'text/plain', users: [] } 

也看起来政策不能适用于意见,但行动只有嗯…

原因

我认为你的问题来自这个页面http://sailsjs.org/documentation/concepts/middleware使用不正确的模式http-auth模块。

SailsJS使用connect / express风格的中间件,所以你唯一需要做的就是提供适当的中间件。

 // Authentication module. var auth = require('http-auth'); var basic = auth.basic({ realm: "Simon Area." }, function (username, password, callback) { // Custom authentication. callback(username === "Tina" && password === "Bullock"); } }); // Use proper middleware. module.exports.policies = { '*': auth.connect(basic) ... 

去做

有道理通知SailsJS团队,所以他们删除错误的样本。

相关链接

我做的方式是使用config/http.js文件。 在那里创build自定义中间件…

这是我的http.js文件:

 var basicAuth = require('basic-auth'), auth = function (req, res, next) { var user = basicAuth(req); if (user && user.name === "username" && user.pass === "password") return next(); res.set('WWW-Authenticate', 'Basic realm=Authorization Required'); return res.send(401); }; module.exports.http = { customMiddleware: function (app) { app.use('/protected', auth); }, middleware: { order: [ 'startRequestTimer', 'cookieParser', 'session', // 'requestLogger', 'bodyParser', 'handleBodyParserError', 'compress', 'methodOverride', 'poweredBy', '$custom', 'router', 'www', 'favicon', '404', '500' ], requestLogger: function (req, res, next) { console.log("Requested :: ", req.method, req.url); console.log('====================================='); return next(); } } };