У меня есть приложение Angular 6, которое использует cookie-файл аутентификации OAM для связи с внутренними веб-сервисами.Сеансы OAM истекают через X минут или когда тот же пользователь вошел в систему с другого устройства.Я хочу справиться с этим и отобразить всплывающее окно для пользователей, чтобы они могли щелкнуть их и перейти на страницу входа.Я создал HttpInterceptor и вызываю сервис для отображения всплывающего окна.
Когда я развертываю приложение (создаю его, используя ng build
и конфигурации производственного режима), оно прекрасно работает, когда истекает сеанс, и следующее действие пользователя - перейти к пути, у которого нет маршрута.resolver определен в модуле маршрутизации, т.е. сервисы вызываются внутри компонента после инициализации.Всякий раз, когда я пытаюсь перейти к пути, для которого сначала нужно вызвать распознаватель, ничего не происходит.Я пытался добавить консольные журналы и несколько раз переустанавливал, чтобы увидеть, что может быть не так, но распознаватель и перехватчик даже не вызывались.Я просто получаю следующие ошибки на вкладке Консоль, и навигация не происходит:
Uncaught SyntaxError: Unexpected token < at https://login...?bmctx=920634F2F55...e9b2.js
Error: Loading chunk 21 failed...
Из того, что я понимаю, первая ошибка заключается в том, чтоон пытается проанализировать ответ на запрос (который происходит от автоматического перенаправления OAM на страницу входа в систему), а символ <
является началом <!DOCTYPE html>
.Кстати, это тот же самый ответ, который возвращает код ошибки 200 и который я проверяю в моем перехватчике для отображения всплывающего окна.
Странно то, что этого не происходит, когдаЯ запускаю приложение в режиме отладки (используя команду ng serve
).Перехватчик вызывается правильно и во всех случаях!Может ли это быть что-то, связанное с моими конфигурациями сборки, или я пропускаю что-то, связанное с обработкой тайм-аута OAM?
См. Ниже некоторые разделы моего кода:
@Injectable()
export class ResponseInterceptor implements HttpInterceptor {
constructor(private alertMessageService: AlertMessagesService) { }
intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
return next.handle(req).pipe(catchError((error: any, caught: Observable<HttpEvent<any>>) => {
if ((error.status === 200 || error.status === 0) && error.url.indexOf('login.') !== -1) {
this.alertMessageService.displayLogoutConfirmation();
return of(error);
}
throw error;
}));
}
}
Конфигурации развертывания сборки вangular.json:
"configurations": {
"dev1": {
"optimization": true,
"outputHashing": "all",
"sourceMap": false,
"extractCss": true,
"namedChunks": false,
"aot": true,
"extractLicenses": true,
"vendorChunk": false,
"buildOptimizer": true,
"fileReplacements": [
{
"replace": "src/./environments/environment.ts",
"with": "src/./environments/environment.prodpro.ts"
}
]
},