Хотя есть ссылки на эти вопросы, но я не нашел подходящего ответа, так что надеюсь, что кто-то ответит на этот раз.
Вот сценарий: в моем приложении Angular я использую adal-angular4, который является оболочкой для Adal.js
Проблема: метод this.adalService.acquireToken только при первом входе в систему. Я получаю ошибку тайм-аута, но после входа в систему, если я обновлю страницу, тогда метод this.adalService.acquireToken работает правильно, и вот что интересное.
- Проблема возникает только в развернутой среде не на локальном хосте.
- Ошибка «Операция обновления токена не удалась из-за тайм-аута» появляется только иногда, когда сеть медленная или случайная.
Вот моя служба перехватчика запросов
intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> | Observable<HttpSentEvent | HttpHeaderResponse
| HttpProgressEvent | HttpResponse<any> | HttpUserEvent<any>> {
if (req && req.params instanceof CustomAuthParams && req.params.AuthNotRequired) {
return this.handleAuthentication(req, next, null);
} else {
if (!this.adalService.userInfo.authenticated) {
console.log(req, 'Cannot send request to registered endpoint if the user is not authenticated.');
}
var cachedToken = this.adalService.getCachedToken(environment.authSettings.clientId);
console.log('cachedToken', cachedToken);
if (cachedToken) {
return this.adalService.acquireToken(resourceURL).timeout(this.API_TIMEOUT).pipe(
mergeMap((token: string) => {
return this.handleAuthentication(req, next, token);
})
).catch(err => { console.log('acquire token error', err); return throwError(err) })
} else {
this.adalService.login();
}
}
}