Hapi js - Как отправить запрос на сервер для выполнения базовой аутентификации? - PullRequest
0 голосов
/ 27 августа 2018

Я создаю веб-приложение nodejs и vuejs, и я загружаю файлы 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,
                }
            }
        });

Например, на вышеуказанном маршруте появляется окно с подсказкой.

Ответы [ 2 ]

0 голосов
/ 31 августа 2018

Для начала я думаю, что вы используете неправильную стратегию аутентификации для такого рода приложений. Вместо hapi-auth-basic я бы использовал hapi-auth-cookie или hapi-auth-jwt2 .

Выбранная вами стратегия будет определять способ отправки сеанса, прошедшего проверку подлинности, на сервер. Для JWT (JSON Web Tokens) вы отправляете их в виде значения заголовка на клиенте или в виде файла cookie - для этого достаточно нескольких удобных клиентских библиотек Vue, которые работают довольно хорошо - vue-auth - мой любимый .

Для hapi-auth-cookie вам не нужно ничего делать, если ваше приложение Vue находится в том же домене, что и ваш сервер hapi - просто убедитесь, что вы передаете withAuthentication: true в своих вызовах axios / $ http на клиент Vue, чтобы он знал, чтобы отправить куки.

0 голосов
/ 31 августа 2018
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');
    }
};
...