Node.js 理解hapi-js的生命周期

Node.js 理解hapi-js的生命周期,node.js,hapijs,hapi.js,Node.js,Hapijs,Hapi.js,以下是Hapi生命周期: OnRequest:当请求到达服务器时调用 OnPreAuth:当请求到达路由的身份验证部分时调用 OnPostAuth:当请求从路由的auth部分发出时调用 OnPreHandler:当请求到达路由的处理程序部分时调用 OnPostHandler:当请求从路由的处理程序部分发出时调用 OnPreResponse:返回响应时调用 7 onCredentials:是Hapi v17的新功能 无法理解onCredentials的用途。 此外,如果我对hapi的生命周期理解错

以下是Hapi生命周期:

  • OnRequest:当请求到达服务器时调用
  • OnPreAuth:当请求到达路由的身份验证部分时调用
  • OnPostAuth:当请求从路由的auth部分发出时调用
  • OnPreHandler:当请求到达路由的处理程序部分时调用
  • OnPostHandler:当请求从路由的处理程序部分发出时调用
  • OnPreResponse:返回响应时调用

    7 onCredentials:是Hapi v17的新功能

    无法理解onCredentials的用途。 此外,如果我对hapi的生命周期理解错误,请纠正我


  • 你的理解是正确的。OnPreAuth和OnPostAuth之间添加了onCredentials,这里没有多少相关信息

    新的onCredentials扩展点和更改 在验证授权之前请求凭据

    资料来源:

    还有一点

    onCredentials:每个请求都有一个新的请求扩展点 hapi遵循一个预定义的路径:请求生命周期。取决于 无论您需要身份验证还是验证,框架都会跳过 单个生命周期点

    hapi v17中有一个新的扩展点:onCredentials。这 扩展点位于onPreAuth之后和onPostAuth之前。在里面 在预授权时,hapi对请求进行身份验证并识别用户。这个 授权是onPostAuth的一部分,就像检查请求范围一样 验证请求是否具有访问权限

    在onCredentials中,您可以在请求之前自定义凭据 授权

    资料来源:

    这意味着您可以修改凭证对象。下面是简单的示例代码。假设您希望在基于用户信息进行身份验证后更新凭据范围

      register: async (server, options) => {
    
            server.ext('onRequest', (request, h) => {
                if (request.params) {
                    log.verbose(`onRequest:${request.method.toUpperCase()}:${request.path}/${request.params}`)
                } else {
                    log.verbose(`onRequest:${request.method.toUpperCase()}:${request.path}`)
                }
    
                if (Object.getOwnPropertyNames(request.query).length) {
                    log.verbose(`onRequest:queryParameters: ${JSON.stringify(request.query)}`)
                }
    
                if (request.headers && request.headers['x-access-token']) {
                    log.verbose(`onRequest:heders:x-access-token ${JSON.stringify(request.headers['x-access-token'])}`)
                }
    
                return h.continue
            })
    
            server.ext('onPreAuth', (request, h) => {
                log.verbose('onPreAuth')
                return h.continue
            })
    
            server.ext('onCredentials', (request, h) => {
                log.verbose('onCredentials')
                return h.continue
            })
    
            server.ext('onPostAuth', (request, h, error) => {
                if (request.payload) {
                    log.verbose(`onPostAuth:bodyPayload: ${JSON.stringify(request.payload)}`)
                }
                return h.continue
            })
    
            server.ext('onPreHandler', (request, h) => {
                log.verbose('onPreHandler')
                return h.continue
            })
    
            server.ext('onPostHandler', (request, h) => {
                log.verbose('onPostHandler')
                return h.continue
            })
    
            server.ext('onPreResponse', (request, h) => {
                if (request && request.response && request.response.source) {
                    try {
                        log.verbose(`onPreResponse:${JSON.stringify(request.response.source)}`)
                    } catch (err) {
                        log.warn(err)
                        log.verbose(h.request.response.source.toString())
                    }
                }
                return h.continue
            })
        }
    

    拥有2.5k+积分的人能否将这两个标记设置为同义词:
    hapijs
    hapi.js
    ?它们似乎是相同的API()
    server.ext('onCredentials', (request, h) => {
    
        request.auth.credentials.scope = 'customadmin';
        return h.continue;
    });