hapi-auth-cookie无法加载会话策略

hapi和auth-cookie插件没有太多的例子,但是为了确保路线,这里是我迄今为止所做的。 请注意,我见过的大多数例子都是使用旧版本的hapi,这似乎并不适用于这种情况,我希望只是缺less一些简单的东西:

var Hapi = require('hapi'); var Mongoose = require('mongoose'); Mongoose.connect('mongodb://localhost/rfmproducetogo'); var server = new Hapi.Server(8080, "localhost"); server.pack.register([{ plugin: require("lout") }, { plugin: require('hapi-auth-cookie') }, { plugin: require("./plugins/togo") }, { plugin: require("./plugins/auth") }], function(err) { if (err) throw err; server.auth.strategy('session', 'cookie', { password: 'shhasecret', cookie: 'wtfisthisfor', isSecure: false, redirectTo: false }); server.start(function() { console.log("hapi server started @ " + server.info.uri); }); }); 

在我的togo插件中,我有这个路由设置来使用会话

 exports.create = function(plugin) { plugin.route({ method: 'POST', path: '/togo/add', handler: function(request, reply) { produce = new Produce(); produce.label = request.payload.label; produce.price = request.payload.price; produce.uom = request.payload.uom; produce.category = request.payload.category; produce.save(function(err) { if (!err) { reply(produce).created('/togo/' + produce._id); } else { reply(err); } }); }, config: { auth: 'session' } }); }; 

我看到的错误是这样的:

 /home/adam/Projects/bushhog/node_modules/hapi/node_modules/hoek/lib/index.js:421 throw new Error(msgs.join(' ') || 'Unknown error'); ^ Error: Unknown authentication strategy: session in path: /togo/add at Object.exports.assert (/home/adam/Projects/bushhog/node_modules/hapi/node_modules/hoek/lib/index.js:421:11) at /home/adam/Projects/bushhog/node_modules/hapi/lib/auth.js:123:14 at Array.forEach (native) at internals.Auth._setupRoute (/home/adam/Projects/bushhog/node_modules/hapi/lib/auth.js:121:24) at new module.exports.internals.Route (/home/adam/Projects/bushhog/node_modules/hapi/lib/route.js:118:43) at /home/adam/Projects/bushhog/node_modules/hapi/lib/router.js:110:25 at Array.forEach (native) at /home/adam/Projects/bushhog/node_modules/hapi/lib/router.js:107:17 at Array.forEach (native) at internals.Router.add (/home/adam/Projects/bushhog/node_modules/hapi/lib/router.js:104:13) 

运行节点0.10.28,hapijs 6.x,hapi-auth-cookie 1.02

当您尝试在实际可用之前使用身份validation策略时,会发生此问题。

您已经通过将function拆分为具有特定范围的单个小插件来遵循良好的应用程序设置。


更新:这是一个专门的教程, 如何解决“未知的身份validation策略”


设置身份validation和依赖身份validation的插件的一个好方法是创build一个额外的“auth插件”,添加所需的策略,并可用作其他插件的依赖项。

hapi auth插件示例

 exports.register = function (server, options, next) { // declare/register dependencies server.register(require('hapi-auth-cookie'), err => { /** * Register authentication strategies to hapi server * * We're using hapi-auth-cookie plugin to store user information on * client side to remember user data on every website visit * * For sure, we could and will add more authentication strategies. * What's next: JWT (we highly welcome pull requests to add JWT functionality!) */ server.auth.strategy('session', 'cookie', { password: 'ThisIsASecretPasswordThisIsASecretPassword', cookie: 'hapi-rethink-dash', redirectTo: '/login', isSecure: false }); server.log('info', 'Plugin registered: cookie authentication with strategy »session«') next() }) } exports.register.attributes = { name: 'authentication', version: '1.0.0' } 

在你的/plugins/togo你将authentication plugin设置为一个依赖项(使用server.dependency([array-of-deps]) ),这意味着hapi首先注册auth插件,之后注册auth插件。

你像这样注册你的插件:

 server.register([{ plugin: require('./plugins/authentication') }, { plugin: require("./plugins/togo") }], function(err) { // handle callback }) 

检查一个详细的例子hapi-rethinkdb-dash 。

希望有所帮助!

请记住,如果你使用像Marcus Poehls这样的插件中的server.dependency,你还需要注册依赖

 server.register([{ plugin: require('hapi-auth-cookie') },{ plugin: require('./plugins/authentication') }, { plugin: require("./plugins/togo") }], function(err) { // handle callback })