Обновление токена в перехватчиках axios не работает

#reactjs #axios #azure-active-directory #refresh-token #adal-deprecation

#reactjs #axios #azure-active-directory #обновить токен #azure-ad-adal-устаревание

Вопрос:

Я использую react-adal библиотеку для подключения к ADFS . Я использую axios interceptor для получения токена, который будет обновлять токен автоматически, как написано в документах, но он обновляет страницу, когда срок действия токена истекает, пользователь заполняет форму, и срок действия токена истекает, он обновляет страницу и теряет все данные. Пожалуйста, найдите приведенный ниже код:

     axiosApi.interceptors.request.use((config) => {
return new Promise((resolve, reject) => {
let azureToken = adalInstance.getCachedToken(adalConfig.resource)
if (azureToken) {
    adalInstance.acquireToken(adalConfig.endpoints.api, (message, token, error) => {
                console.log(error);});
                config.headers.Authorization = "Bearer "   azureToken;
               
                resolve(config);}
            else {
                
                adalInstance.login();
            }
    });
});
  

Есть ли какой-либо способ, которым это можно сделать в фоновом режиме, и пользователь не должен видеть никаких прерываний.

Комментарии:

1. С какой проблемой вы столкнулись? какая-либо ошибка или вы видите всплывающее окно для входа в систему? Также какой API задерживает ответ api?

2. Привет, я отредактировал вопрос, можете ли вы проверить его один раз, более ранняя проблема решена. Теперь я хочу знать, может ли он обновлять токен в фоновом режиме по истечении срока действия, чтобы пользователю не нужно было знать об этом.

Ответ №1:

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

ADAL.js предоставляет метод acquireTokenPopup, который может быть использован в этой ситуации (вместо acquireTokenRedirect), чтобы сохранить пользователя на той же странице и не прерывать поток.