#javascript #reactjs #react-native #redux #axios
#javascript #reactjs #react-native #redux #axios
Вопрос:
У меня есть accessToken в моем хранилище redux. Я создаю клиент axios следующим образом:
import axios from 'axios';
import store from '../redux/store';
const apiClient = axios.create({
baseURL: 'http://localhost:5002/api/',
headers: {
Authorization:`Bearer ${store.getState().auth.accessToken}` // ???
}
});
apiClient.defaults.headers.common['Authorization'] = `Bearer ${store.getState().auth.accessToken}`; // ???
export default apiClient;
Я хочу, чтобы каждый запрос, отправляемый ApiClient, содержал текущее значение accessToken из хранилища redux (на момент отправки запроса). И со строками, которые отмечены ???, я не уверен, устанавливается ли заголовок авторизации только один раз при создании ApiClient, или значение заголовка также изменяется при обновлении accessToken в хранилище.
Позже я хочу сделать запрос, подобный этому:
apiClient.get<User[]>('Users/Friends');
И я хочу, чтобы запрос включал accessToken, который находится в хранилище во время отправки запроса, а не во время создания клиента. Есть ли способ добиться этого при создании клиента или мне всегда нужно указывать конфигурацию заголовка авторизации с текущим accessToken в каждом запросе?
Теперь я добавил этот код:
const apiClient = axios.create({
baseURL: 'http://192.168.178.188:5002/api/'
});
apiClient.interceptors.request.use(config => {
config.headers['Authorization'] = `Bearer ${store.getState().auth.accessToken}`
return config;
});
Это самое элегантное решение?