首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Hapi.js不工作

Hapi.js不工作
EN

Stack Overflow用户
提问于 2017-04-01 15:43:06
回答 3查看 1.2K关注 0票数 2

这是我的代码,这里的问题是,当我使用hapi 14.x.x或更低版本运行它时,它非常适合我,但是当我使用hapi版本15.0.1或更高版本运行它时,它会给我以下错误。

认证过程中有什么变化吗?

代码语言:javascript
复制
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)

我正在使用的示例路线

代码语言:javascript
复制
  {
        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
                }
            }
        }
    }

我正在使用的策略

代码语言:javascript
复制
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) {

        }
    });
});
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-04-03 09:34:18

这解决了我的问题,插件注册是来自HAPI15.x.x或更高版本的异步

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

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

单击此处可从最新更新线程编号is 3295获得更多有关它的详细信息。

代码语言:javascript
复制
  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');
        }
    });
票数 0
EN

Stack Overflow用户

发布于 2017-06-01 14:03:24

发生此错误是因为您希望注册一个需要身份验证策略的路由,而hapi服务器还不能使用该策略。

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

本教程提出2种解决方案。

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

希望这能帮上忙!

票数 1
EN

Stack Overflow用户

发布于 2017-04-03 10:39:24

你只有定义的策略,没有计划。因此,按照下面的代码定义您的计划。

你应该试试这个:

代码语言:javascript
复制
 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
              }
            }
          }
        }]);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43158808

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档