Hapi.js认证不起作用

时间:2017-04-01 15:43:07

标签: javascript node.js mongodb hapijs

这是我的代码现在这里的问题是当我用hapi版本14.xx或更低版本运行它时它对我来说非常好但是当我用hapi版本15.0.1或更高版本运行它时它会给我以下错误

身份验证过程是否有任何变化?

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) {

        }
    });
});

3 个答案:

答案 0 :(得分:1)

发生此错误是因为您想要注册一个需要身份验证策略的路由,该策略尚不适用于hapi服务器。

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

This tutorial proposes 2 solutions

  1. 一个专用的身份验证插件,您的其他hapi插件使用它作为依赖项,因此在添加路由之前可用
  2. 将您添加路由的部分移至插件注册回调中以及策略定义之后
  3. 希望有所帮助!

答案 1 :(得分:0)

这解决了我在hapi版本15.x.x或更高版本中插件注册异步的问题

说明:在版本14.xx或更低版本的内容同步进行,就像我们启动服务器时一样,它会首先注册插件然后它将用于路由 server.route(路由)。 / p>

这已经在hapi版本15.x.x及更高版本中修复了插件注册是异步的所以我们需要先注册我们的插件然后需要初始化路由,如下例所示。

Click here to get more details about it from latest updates thread no is 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');
        }
    });

答案 2 :(得分:0)

您只定义了策略,而不是方案。所以定义你的方案,如下面的代码。

你应该试试这个:

side