Аутентификация NodeJS с помощью Axios - PullRequest
0 голосов
/ 30 сентября 2018

У меня закрытое приложение CouchDB (поэтому оно требует аутентификации).Я подключаюсь к нему из серверной части NodeJS, которая должна получить доступ администратора и делать свое дело.Поэтому я хочу перехватывать запросы, которые не прошли проверку подлинности или срок действия которых истек.

Для этого у меня есть axios.create() da client.У этого клиента есть перехватчик, который использует для аутентификации исходный объект axios, а затем устанавливает cookie-файл из ответа на заголовки client по умолчанию.Код выглядит примерно так:

import axios from 'axios';

const baseURL = 'http://127.0.0.1:5984/';
const name = 'admin';
const password = 'mypass';
const cookieTimeout = (10 * 60 * 1000);
let cookieCreated;

const client = axios.create({
    baseURL,
    headers: {
        Accept: 'application/json',
        post: { 'Content-Type': 'application/x-www-form-urlencoded' },
    },
});

const cookieInterceptor = (config) => {
    const now = Date.now();
    if (!cookieCreated || cookieCreated + cookieTimeout <= now) {
        // Using the default 'axios' object because if we use 'client',
        // it will loop into intercepting its own request again.
        return axios.post(`${baseURL}/_session`, { name, password })
            .then((response) => {
                // Cache a new cookie and return it
                cookieCreated = now;
                client.defaults.headers.common.Cookie = response.headers['set-cookie'].join(';');
                return config;
            })
            .catch(error => console.log(error));
    }

    return Promise.resolve(config);
};

client.interceptors.request.use(cookieInterceptor);

export default client;

Это, вероятно, неоптимальный способ сделать это, но на самом деле проблема заключается в том, что вызов client.get() не заканчивается проверенным запросом, когда язвоню в первый раз после запуска приложения.Впоследствии это хорошо, но, вероятно, процесс аутентификации идет где-то в фоновом режиме.

Вопрос в том, как заставить мой перехватчик аутентифицировать моего клиента перед выполнением фактического запроса?Является ли перехватчик правильным способом сделать это?Кроме того, если есть менее ужасный способ сделать это, я полностью открыт для предложений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...