#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']);
}
});
}