Arhn - архитектура программирования

Angular Auth OIDC; Azue B2C: получение загрузки профиля пользователя и обещание неперехваченной ошибки после получения токена из Azure

Я реализовал аутентификацию аутентификации в приложении Angular 9 с помощью Azure B2C с использованием библиотеки angular-oauth2-oidc, и мне удалось получить токен, однако я одновременно получаю сообщение об ошибке «Uncaught (in обещание)» и «ошибка» при загрузке информации о пользователе TypeError. .

ошибка профиля пользователя

введите описание изображения здесь

Обещать неперехваченную ошибку

введите описание изображения здесь

Служба аутентификации

@Injectable()
export class AuthService implements OnInit{

_accessToken: string; 
_idToken: string;

private isAuthenticatedSubject$ = new BehaviorSubject<boolean>(false);
public isAuthenticated$ = this.isAuthenticatedSubject$.asObservable();
private isDoneLoadingSubject$ = new ReplaySubject<boolean>();
public isDoneLoading$ = this.isDoneLoadingSubject$.asObservable();

public canActivateProtectedRoutes$: Observable<boolean> = combineLatest([
    this.isAuthenticated$,
    this.isDoneLoading$
  ]).pipe(map(values => values.every(b => b)));


constructor(
    private oauthService: OAuthService,
    private router: Router

){
     //debugging - Capture Error Events
     this.oauthService.events.subscribe(event =>{
        if(event instanceof OAuthErrorEvent){
            console.error(event);
        }
        else{
            console.warn(event);
        }
      });
      
   
    console.warn('Noticed changes to access_token (most likely from another tab), updating isAuthenticated');
    this.isAuthenticatedSubject$.next(this.oauthService.hasValidAccessToken());

    this.oauthService.events
    .subscribe(_ => {
      this.isAuthenticatedSubject$.next(this.oauthService.hasValidAccessToken());
    });

    this.oauthService.events
    .pipe(filter(e => ['token_received'].includes(e.type)))
    .subscribe(e => this.oauthService.loadUserProfile());

    this.oauthService.events
     .pipe(filter(e => ['session_terminated', 'session_error'].includes(e.type)))
     .subscribe(e => this.navigateToLoginPage());

    this.oauthService.setupAutomaticSilentRefresh();

}

public initializeAuthService(): Promise<void>{

    this.oauthService.configure(authConfig);

    if (location.hash) {
        console.log('Encountered hash fragment, plotting as table...');
        console.table(location.hash.substr(1).split('&').map(kvp => kvp.split('=')));
    }

    return this.oauthService.loadDiscoveryDocument(DiscoveryDocumentConfig.url)

        .then(() => this.oauthService.tryLogin())

        .then(() => {
            if(this.oauthService.hasValidAccessToken()){
                console.log("Discovery document resolved, Token does exist...", this.oauthService.getAccessToken());
                return Promise.resolve();
            }
        })

        .catch(error => {
            console.error(error);
        })       
}


public login(targetUrl?: string){
    this.oauthService.tryLogin({});

    if(!this.oauthService.getAccessToken()){
        this.oauthService.initImplicitFlow();
    }
}

  • См. это, это может вам помочь 03.07.2020
  • Большое спасибо за то, что направили меня в правильном направлении. Образец кода, который я использую, действительно работает с IdentityServer, но я использую Azure AD B2C. У меня есть обновление oauthService.events, и оно сработало ... большое спасибо 03.07.2020

Ответы:


1

Этот образец работает с IdentityServer, но я использую Azure AD B2C.

Я прокомментировал следующий код в AuthService, и теперь все, похоже, работает:

// this.oauthService.events
//   .pipe(filter((e) => ["token_received"].includes(e.type)))
//   .subscribe((e) => this.oauthService.loadUserProfile());
03.07.2020
Новые материалы

Коллекции публикаций по глубокому обучению
Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

Представляем: Pepita
Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

Советы по коду Laravel #2
1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

3 способа решить квадратное уравнение (3-й мой любимый) -
1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

Создание VR-миров с A-Frame
Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

Демистификация рекурсии
КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..