Hapi.js身份validation不工作

这是我现在的代码这里的问题是,当我运行这个与Hapi版本14.xx或以下它对我来说工作完全正常,但是当我运行这与hapi版本15.0.1或更高,它给了我下面的错误。

身份validation过程中是否有任何更改?

throw new Error(msgs.join(' ') || 'Unknown error'); ^ Error: Unknown authentication strategy UserAuth in /api/user/loginDetails at Object.exports.unique.exports.contain.exports.reachTemplate.exports.assert.condition [as assert] (F:\cbl\projects\lawn-mower\node_modules\hapi\node_modules\hoek\lib\index.js:736 :11) at internals.Auth.test.internals.Auth._setupRoute (F:\cbl\projects\lawn-mower\node_modules\hapi\lib\auth.js:144:14) 

我正在使用的示例路线

  { method: 'POST', path: '/api/user/loginDetails', config: { auth: 'UserAuth', handler: function (request, reply) { }, validate: { payload: { }, headers: UniversalFunctions.authorizationHeaderObj, failAction: UniversalFunctions.failActionFunction }, plugins: { 'hapi-swagger': { payloadType : 'form', responses:Config.APP_CONSTANTS.swaggerDefaultResponseMessages } } } } 

我正在使用的策略

 server.register(require('hapi-auth-bearer-token'), function (err) { console.log("aaaaa"); server.auth.strategy('UserAuth', 'bearer-access-token', { allowQueryToken: false, allowMultipleHeaders: true, accessTokenName: 'accessToken', validateFunc: function (token, callback) { } }); }); 

发生此错误的原因是您要注册一个路由,它需要一个对hapi服务器不可用的身份validation策略。

确保在将路由添加到服务器之前注册UserAuth策略。

本教程提出2个解决scheme

  1. 一个专用的身份validation插件,由其他hapi插件用作依赖项,因此在添加路由之前可用
  2. 将要添加路由的部分移动到插件注册callback以及策略定义之后

希望有所帮助!

这解决了我的问题, 插件注册是asynchronous的从hapi版本15.xx或以上

说明:在版本14.xx或更低的东西同步,就像我们将启动服务器时,它会发现注册的插件,然后将路由server.route(路由)

这是固定在hapi版本15.xx和以上现在插件注册是asynchronous的,所以我们需要先注册我们的插件,然后需要初始化路由,如下面的例子。

点击这里从最新的更新获得更多细节线程号是3295

  server.register(Plugins, function (err) { if (err){ console.log("===========err=========",err) server.error('Error while loading plugins : ' + err) }else { console.log("===================="); server.route(Routes); server.log('info','Plugins Loaded'); } }); 

你只有定义的策略,而不是计划。 因此,像下面的代码定义你的scheme。

你应该试试这个:

  var userFunc=function (server, options) { return { authenticate: function (request, reply) { console.log('UserAuth'); return reply.continue({ credentials: { user: 'UserAuth' } }); } }; }; server.auth.scheme('UserAuthScheme', userFunc); // here server.auth.strategy('UserAuth', 'UserAuthScheme'); // here server.route([{ method: 'POST', path: '/api/user/loginDetails', config: { auth: 'UserAuth', handler: function (request, reply) { reply('/api/user/loginDetails'); }, validate: { payload: { }, headers: UniversalFunctions.authorizationHeaderObj, failAction: UniversalFunctions.failActionFunction }, plugins: { 'hapi-swagger': { payloadType: 'form', responses: Config.APP_CONSTANTS.swaggerDefaultResponseMessages } } } }]);