Я создаю приложение React с клиентом Keycloak JS. Приложение My Keycloak хорошо инициировано и работает в контейнере docker. После подключения мне нужно выполнить некоторые действия.
файл: ContextAction. js
import Dispatch from '../framework/redux/Dispatch';
import ContextService from '../api-services/ff-api/Context';
export const setContext = (userId) => dispatch => {
Dispatch.loading(dispatch, 'SET_CURRENT_USER');
ContextService.getUser(userId)
.then(user_response => {
// Dispatch.done(dispatch, SET_CURRENT_USER_REQUEST, user_response);
dispatch({
type: SET_CURRENT_USER_SUCCESS,
current_user: user_response.data
});
})
}
файл: api-services / ff-api / Context
import BaseService from '../BaseService';
class Context extends BaseService {
constructor() {
super();
this.getUser = (userId) => {
return this.serviceConnector().then((service) => { return service.callApi({ url: `users/${userId}` })});
}
}
}
const context = new Context();
export default context;
на BaseService, я хочу проверить, действителен ли токен, предоставленный Keycloak, иначе я хочу его обновить, а ЗАТЕМ выполнить вызов API
файл: BaseService. js
import ServiceConnector from './ServiceConnector'
import * as properties from '../app-config/properties'
import ApplicationStore from '../framework/redux/ApplicationStore'
import * as AuthorizationActions from '../actions/authorization_actions';
export default class BaseService {
constructor() {
this.serviceConnector = () => {
const state = ApplicationStore.getState();
const { keycloak } = state.authContext;
// for every appi call we want to check the keycloak token
// if the token is expired (or nearly) we want to update it
const getKeycloakPromise = () => new Promise((resolve, reject) => {
if (keycloak.isTokenExpired() || keycloak.isTokenExpired(AuthorizationActions.TOKEN_REFRESH_RATE)) {
keycloak
.updateToken(AuthorizationActions.TOKEN_REFRESH_RATE)
.success(refreshed => {
if (refreshed) {
ApplicationStore.dispatch(AuthorizationActions.updateToken(keycloak.token));
} // else token still valid
resolve(keycloak.token)
})
.error(() => {
// eslint-disable-next-line no-console
console.error('Failed to retrieve an updated token or session has expired.');
ApplicationStore.dispatch(AuthorizationActions.logout({ now: true }));
});
} else {
resolve(keycloak.token)
}
});
const processKeycloakAsycn = async () => {
return await getKeycloakPromise()
};
return processKeycloakAsycn().then((token) => {
return (new ServiceConnector(properties.API_URL || '', token));
}).catch((error) => {
console.log('Error from processDataAsycn() with async( When promise gets rejected ): ' + error);
});
};
}
}
на сервисном коннекторе, я установил ax ios и запустил вызов
Все в порядке, НО если я хочу вызвать другое действие, например getNotifications, я создал другой файл NotificationAction с тем же рабочим процессом и получаю эта ошибка
import setPrototypeOf from "./setPrototypeOf";
export default function _inherits(subClass, superClass) {
if (typeof superClass !== "function" && superClass !== null) {
throw new TypeError("Super expression must either be null or a function");
}
subClass.prototype = Object.create(superClass && superClass.prototype, {
constructor: {
value: subClass,
writable: true,
configurable: true
}
});
if (superClass) setPrototypeOf(subClass, superClass);
}
1 | import BaseService from '../BaseService';
2 |
> 3 | class Context extends BaseService {
4 | constructor() {
5 | super();
6 | this.getUser = (userId) => {
После поиска я обнаружил, что эта ошибка может быть связана с недоразумением по поводу импорта и наследования, но я не вижу никаких ошибок.
Я не Не понимаю, почему ... не могли бы вы мне помочь?