С Axios у вас есть возможность установить значения по умолчанию для всех запросов.
Так что для одного экземпляра Axios вы можете сделать ...
async function authenticate(instance) {
const result = await instance.post(
'/session',
{
'username': config.username,
'password': config.password
}
)
instance.defaults.headers.common['X-Token'] = result.data.token;
}
В качестве альтернативы (что звучит так, как вы хотите), вы можете добавить его для экспорта Axios по умолчанию.Тогда все запросы будут автоматически иметь заголовок.
async function authenticate(endpoint, username, password) {
const res = await axios.post(`${endpoint}/session`, { username, password });
axios.defaults.headers.common['X-Token'] = result.data.token;
}
Тогда вам не нужно беспокоиться о передаче экземпляра между всеми частями вашего приложения, вы можете просто использовать import * as axios from 'axios'
и установить заголовок.
Axios также предоставляет и чрезвычайно полезную функцию, называемую перехватчиками , которую вы можете использовать для проверки запроса перед его выполнением.Вы можете использовать для проверки, чтобы убедиться, что запрос имеет заголовок auth, а если нет, вы можете выполнить эту логику.Я придумал это, и это, кажется, работает хорошо!
axios.interceptors.request.use(async (config) => {
// request intercepted, check (1) the header is missing and (2) that the intercepted request isn't authorizing
if (!config.headers.common['X-Token'] && config.authorizing !== true) {
const { endpoint, username, password } = appConfig;
// make a request to get your token AND pass our custom config
const result = await axios.post(`${endpoint}/session`, { username, password }, { authorizing: true });
// update axios to include the header for future requests
axios.defaults.headers.common['X-Token'] = result.data.token;
}
return config;
});
Две вещи, которые вы хотите отметить - я не только проверяю наличие вашего заголовка X-токена, но и проверяюновое значение авторизации в конфиге.Вы хотите проверить это значение конфигурации, потому что мы собираемся использовать его в качестве флага, чтобы сообщить перехватчику, следует ли ему пропустить запрос.Если вы этого не сделаете, запрос авторизации вызовет другой запрос авторизации и бесконечный цикл.