如何在自动创建的 API Rest Hapi 之前获取 validateFunc 的结果

Posted

技术标签:

【中文标题】如何在自动创建的 API Rest Hapi 之前获取 validateFunc 的结果【英文标题】:How to get result of validateFunc in pre of auto created API Rest Hapi 【发布时间】:2017-11-16 17:07:27 【问题描述】:

我是 Hapi.js 的新手。我正在使用 "hapi-auth-jwt2" 模块进行身份验证令牌和角色验证。我设置了范围并从 validateFunc 的回调中发送了该范围。它将非常适合检查基于角色的身份验证。但我想要从 validateFunc 返回的结果,但不知道在哪里可以得到。

validateFunc: function (token, request, callback) 
            Async.auto(
                session: function (done) 
                    Session.findByCredentials(token.sessionId, token.sessionKey, done);
                ,
                user: ['session', function (results, done) 

                    if (!results.session) 
                        return done();
                    

                    User.findById(results.session.user, done);
                ],
            , (err, results) => 
                if (err) 
                    return callback(err);
                

                if (!results.session) 
                    return callback(null, false);
                
                results.scope = token.scope;
                callback(null, Boolean(results.user), results);
            );
        
    );


;
`

它验证域中的范围或角色,即:-

  routeOptions: 
                scope:
                    createScope:"admin"
                , 
  create: 
        pre : function(payload, Log)
            console.log("preee runnnig........");
            console.log(payload);
        
      

我正在获取从客户端发送的有效负载 Json,但我想要从 validateFunc 的回调发送的结果,因为我想在发送请求之前在此处使用该数据。我正在通过 Rest Hapi 模块处理隐式创建的 API。

那么我怎样才能从 validateFunc 中获取数据预挂钩。非常感谢任何帮助。

谢谢

【问题讨论】:

【参考方案1】:

这实际上是一个正在开发的功能,希望很快就会完成。

目前,您可以通过omit the generated create endpoint 和replace it with your own 访问请求对象。

生成的代码如下所示:

'use strict';

const RestHapi = require('rest-hapi');

module.exports = function (server, mongoose, logger) 
    server.route(
      method: 'POST',
      path: '/pathName',
      config: 
        handler: function(request, reply)  
          /* modify request.payload here and access auth info through request.auth.credentials */

          const Model = mongoose.model('modelName');
          return RestHapi.create(Model, request.payload, logger)
            .then(function (result) 
              return reply(result);
            )
            .catch(function (error) 
              return reply(error);
            );
        ,
        tags: ['api'],
        plugins: 
          'hapi-swagger': 
        
      
    );
;

【讨论】:

以上是关于如何在自动创建的 API Rest Hapi 之前获取 validateFunc 的结果的主要内容,如果未能解决你的问题,请参考以下文章

使用 hapi 创建 restfulAPI

Mongoose 自定义类型在 hapi / rest-hapi 中导致 500 内部服务器错误

1如何使用Azure Rest API创建虚拟机

如何在使用 PayPal rest API 执行付款之前更改运费

无法在heroku中加载favicon.ico for rest api

在 REST API 中使 PUT 创建请求幂等