【问题标题】:Hapi.js auth not workingHapi.js 身份验证不起作用
【发布时间】:2017-06-01 22:03:24
【问题描述】:

这是我的代码现在这里的问题是当我使用 hapi 版本 14.x.x 或更低版本运行它时,它对我来说非常好,但是当我使用 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) {

        }
    });
});

【问题讨论】:

  • 你使用什么认证策略?
  • @simon-p-r 编辑了我的答案。但是当我使用低于 14.x.x 或更低的 hapi 版本时它对我有用,当我将版本升级到 15.x.x 或 16.x.x 时,它会产生上述错误
  • @simon-p-r 嘿,知道我错过了什么吗?
  • 尝试将字符串 UserAuth 更改为 simple
  • @simon-p-r 尝试得到同样的错误

标签: javascript node.js mongodb hapijs


【解决方案1】:

出现此错误是因为您要注册一个需要身份验证策略的路由,而 hapi 服务器尚不可用。

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

This tutorial proposes 2 solutions

  1. 一个专用的身份验证插件,您的其他 hapi 插件将其用作依赖项,因此在添加路由之前可用
  2. 将添加路由的部分移到插件注册回调中和策略定义之后

希望有帮助!

【讨论】:

    【解决方案2】:

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

    说明:在 14.x.x 或更低版本中,事情是同步进行的,比如当我们启动服务器时,它会先注册插件,然后它会去路由 server.route(Routes)

    这已在 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');
            }
        });
    

    【讨论】:

      【解决方案3】:

      您只定义了策略,没有定义方案。所以像下面的代码一样定义你的方案。

      你应该试试这个:

       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
                    }
                  }
                }
              }]);
      

      【讨论】:

      • 阅读以下对我有用的答案,并指定了确切的问题以及解决方法。
      猜你喜欢
      • 1970-01-01
      • 2012-10-04
      • 1970-01-01
      • 1970-01-01
      • 2012-04-29
      • 2012-03-18
      • 2011-07-05
      相关资源
      最近更新 更多