首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >理解hapi js的LifeCycle

理解hapi js的LifeCycle
EN

Stack Overflow用户
提问于 2018-06-18 12:52:54
回答 1查看 7.6K关注 0票数 4
代码语言:javascript
复制
  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
        })
    }

这些是Hapi LifeCycle:

  1. OnRequest:当请求到达服务器时调用。
  2. OnPreAuth:当请求到达路由的第四部分时调用。
  3. OnPostAuth:当请求从路由的第四部分发出时调用。
  4. OnPreHandler:当请求到达路由的处理程序部分时调用。
  5. OnPostHandler:当请求从路由的Handler部分发出时调用。
  6. OnPreResponse:返回响应时调用。 7 onCredentials:是Hapi v17的新产品。 无法理解onCredentials用于什么目的。另外,如果我理解错了hapi的生命周期,请纠正我。
EN

回答 1

Stack Overflow用户

发布于 2018-06-20 08:02:15

你的理解是正确的。onCredentials添加到OnPreAuth和OnPostAuth之间,这里几乎没有关于它的信息。

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

来源:https://github.com/hapijs/hapi/issues/3658

这里再多一点

onCredentials:一个新的请求扩展点,与hapi一起服务的每个请求遵循一个预定义的路径:请求生命周期。根据您是否需要身份验证或验证,框架将跳过各个生命周期点。 hapi v17中有一个新的扩展点: onCredentials。此扩展点位于onPreAuth之后和onPostAuth之前。在onPreAuth中,hapi对请求进行身份验证并标识用户。授权是onPostAuth的一部分,就像检查请求范围以验证请求是否具有访问权限一样。 在onCredentials中,可以在请求授权之前自定义凭据。

来源:https://futurestud.io/tutorials/hapi-v17-upgrade-guide-your-move-to-async-await

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

代码语言:javascript
复制
server.ext('onCredentials', (request, h) => {

    request.auth.credentials.scope = 'customadmin';
    return h.continue;
});

Hapi.js范围解释

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50909992

复制
相关文章

相似问题

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