Ответы пользователя по тегу JavaScript
  • Как правильно обработать получение access токена в interceptors на axios?

    @Bart0725
    Мое решение, которое я использую при авторизации к КК

    import _ from 'lodash';
    const mainFetch = axios.create();
    
    export const issueToken = () => {
        return new Promise((resolve, reject) => {
            return keycloak.updateToken(30000).success((refreshed) => {
                if (refreshed) {
                    resolve(keycloak.token);
                    sessionStorage.setItem("kctoken", `${keycloak.token}`);
                } else {
                    console.log('not refreshed ' + new Date());
                }
            }).error(() => {
                reject();
                keycloakLogout();
            });
        });
    }
    
    mainFetch.interceptors.request.use((config) => {
        let originalRequest = config;
        if (keycloak.isTokenExpired(30000)) {
            return issueToken().then((token) => {
                _.set(originalRequest, 'headers.Authorization', `Bearer ${token}`);
                return Promise.resolve(originalRequest);
            });
        } else {
            _.set(config, 'headers.Authorization', `Bearer ${sessionStorage.getItem("kctoken")}`);
        }
        return config;
    }, (err) => {
        return Promise.reject(err);
    });


    Работает оно так, при запросе обращаемся к КК специальным методом isTokenExpired в моем случае за 30 секунд до протухания, если время истекает запрашиваем новый и возвращаем конфиг с новым токеном, если нет - берем токен из сессии
    Ответ написан
    Комментировать