Hapi js - 如何发送服务器请求进行基本身份验证?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Hapi js - 如何发送服务器请求进行基本身份验证?相关的知识,希望对你有一定的参考价值。

我构建了一个nodejs和vuejs Web应用程序,然后从服务器加载vue js dist文件并渲染它们。另外,我正在使用hapi-auth-basic。现在我想在服务器和前端之间建立连接,但现在,它只显示了一个包含基本字段的提示窗口,我想在vue模板中以我的登录表单嵌入身份验证过程。那怎么办呢?我只是想在出现的提示窗口中执行相同的操作来调用场景。

await server.register([require('hapi-auth-basic'), require('inert')]);

server.auth.strategy('simple', 'basic', {
            key: privateKey, 
            validate: validate,
            // validate: validate 
        });

server.route({
            method: 'GET',
            path: '/{param*}',
            options: {
                auth: 'simple'
            },
            handler: {
                directory: {
                    path: '.',
                    redirectToSlash: true,
                    index: true,
                }
            }
        });

例如,在上述路径中,将出现提示窗口。

答案
ROUTES

 {
        method: 'GET',
        path: '/api/plumber/getHydrantJSON',
        options: {
            description: 'getHydrantJSON',
            auth :'HYDRA',
            tags: ['api', 'information'],
            handler: async (request, h)=> {
                return Controller.PlumberController.getHydrantJSON(request.query,request.auth.credentials)
                    .then(result =>{
                        return h.response(UniversalFunctions.sendSuccess(Config.APP_CONSTANTS.STATUS_MSG.SUCCESS.LOGIN, result));
                    })
                    .catch(reason =>{
                        return h.response(UniversalFunctions.sendError(reason));
                    })
            },
            validate: {
                query: {
                    skip:Joi.number(),
                    limit:Joi.number()
                },
                headers: UniversalFunctions.authorizationHeaderObj,
                failAction: UniversalFunctions.failActionFunction
            },
            plugins: {
                'hapi-swagger': {
                    payloadType: 'form'
                }
            }
        }
    }



 //authentication

exports.plugin = {
    name: 'auth',
    register: async (server, options) => {
        await server.register(require('hapi-auth-jwt2'));
        server.auth.strategy(
            'HYDRA',
            'jwt',
            {
                key          :  Config.APP_CONSTANTS.SERVER.JWT_SECRET_KEY,          //  Never Share your secret key
                validate     :  TokenManager.verifyToken,                           //   validate function defined above
                verifyOptions: { algorithms: [ 'HS256' ] }                         //    pick a strong algorithm
            });

       // server.auth.default('ADMIN');
    }
};
另一答案

对于初学者,我认为你在这种应用程序中使用了错误的身份验证策略。而不是hapi-auth-basic我会使用hapi-auth-cookiehapi-auth-jwt2

您选择的策略将决定如何将经过身份验证的会话发送到服务器。对于JWT(JSON Web令牌),您可以将它们作为客户端上的Header值或作为cookie发送 - 有一些方便的Vue客户端库用于处理这个工作相当不错 - vue-auth is my favorite

对于hapi-auth-cookie,只要您的Vue应用程序与您的hapi服务器位于同一个域中,您就不需要做任何事情 - 只需确保在Vue客户端的axios / $ http调用中传入withAuthentication: true,以便它知道发送cookie。

以上是关于Hapi js - 如何发送服务器请求进行基本身份验证?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 hapi.js 上的路径上使用 hapi-auth-jwt2 身份验证?

如何使用Backbone和Node.js / Hapi防止CORB错误?

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

无法使用基本身份验证进行身份验证

使用 Nodejs (Hapi.js) 和 Prisma 的 Docker 中的 ConnectionError

分离前端和后端 - 使用 Vue/Webpack/Hapi 进行持久身份验证