angular oidc-клиент: getUser() всегда возвращает значение null

#angular #oidc-client

Вопрос:

Я использую oidc-клиент в своем проекте angular. Я написал приведенный ниже код в app.component.ts, чтобы перенаправить пользователя на домашнюю страницу, если объект пользователя не равен нулю. Но объект пользователя всегда равен нулю даже после успешного входа в систему. Я использую microsoft azure для аутентификации.

приложение.компонент.ts

 async ngOnInit() {
    await this.authService.getUser().then(user => {
        console.log(user) // always returns null even after login
        if (user) {
            this.router.navigate(['/home']);
        }
    });
}

login() {
    this.authService.signinRedirect();
}
 

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

 export class AuthenticationService {
    
    private userManager: UserManager;
    constructor(settings: Settings) {
        this.userManager = new UserManager(settings);
    }

    public signinRedirect() {
       this.userManager.signinRedirect();
    }

    public getUser() {
        return this.userManager.getUser();
    }
}
 

Я не вижу пары ключ:вал в локальном/сеансовом хранилище с именем oidc.user.xxxxxxx после успешного входа в систему.

Кроме того, я перепроверил некоторые примеры внутренних приложений. После успешного входа в систему api oidc запускает вызов конечной точки токена. В моем случае эта конечная точка не вызывается.

Чего может не хватать? Что я делаю не так?

Комментарии:

1. В каком модуле предоставляется услуга аутентификации, также если вы можете опубликовать код пользователя?

2. У меня есть только один модуль. UserManager взят из библиотеки oidc-клиента.

Ответ №1:

Регистрация обратного вызова перенаправления входа в app.component.ts решила эту проблему.

 async ngOnInit() {
if (window.location.href.includes('code')) { // without this if condition I am getting an error saying no state in response. not sure if there is a better way.
     this.authService.signinRedirectCallback();
}

await this.authService.getUser().then(user => {
    console.log(user) // always returns null even after login
    if (user) {
        this.router.navigate(['/home']);
    }
});
 

}