TypeError: Невозможно прочитать свойство 'nonceStateSeparator - PullRequest
0 голосов
/ 12 июня 2018

В настоящее время я пытаюсь внедрить аутентификацию Azure в мое угловое приложениеК сожалению, я сталкиваюсь с ошибкой, которую не понимаю.В моем приложении я вызываю функцию tryLogin из пакета angular-oauth2-oidc.Вход в систему работает до тех пор, пока эта функция не будет вызвана, так как он выдает мне следующую ошибку:

ERROR Error: Uncaught (in promise): TypeError: Cannot read property 'nonceStateSeparator' of null
TypeError: Cannot read property 'nonceStateSeparator' of null
    at OAuthService.push../node_modules/angular-oauth2-oidc/esm5/angular-oauth2-oidc.js.OAuthService.tryLogin

Функция входа в систему, похоже, работает, так как она возвращает токены в качестве параметров в URL-адресе в приложении.

Мой код:

export class AppComponent implements OnInit {
  title = 'test';

  constructor(private oauthService: OAuthService) {

  }

  private async ConfigureAuth(): Promise<void> {
    this.oauthService.loginUrl = 'loginurl';
    this.oauthService.clientId = 'clientid';
    this.oauthService.resource = 'resource';
    this.oauthService.logoutUrl = 'logoutUrl';
    this.oauthService.redirectUri = window.location.origin + '/';
    this.oauthService.scope = 'openid';
    this.oauthService.oidc = true;
    this.oauthService.setStorage(sessionStorage);
  }

  async ngOnInit() {
    console.log('Starting ngInit');

    await this.ConfigureAuth();
    console.log('Await passed ngInit');

    this.oauthService.tryLogin({}); //ERROR here

    console.log('TryLogin passed ngInit');

    if(!this.oauthService.getAccessToken()) {
      console.log('no accestoken - ngInit');
      await this.oauthService.initImplicitFlow();
    }
    console.log(this.oauthService.getAccessToken());
    console.log('Finished ngInit');
  }
}

Я надеюсь, что кто-то может помочь мне с этим вопросом.

1 Ответ

0 голосов
/ 12 июня 2018

Вы не должны устанавливать значения конфигурации индивидуально.Очевидно, библиотека исключает объект конфигурации, который должен быть передан с использованием метода configure:

private configureAuth(): void {
  this.oauthService.configure({
    loginUrl: 'loginurl',
    clientId,
    resource,
    logoutUrl
    // ... etc
  });      

  this.oauthService.setStorage(sessionStorage);
}

Кроме того, async в действительности не требуется в текущей реализации.В вашем configureAuth нет никакого метода async.

Sidenote: лучше было бы создать отдельный файл конфигурации для вашей конфигурации oauth и просто импортировать его в ваш компонент.

Еще лучше было быне иметь такого рода бизнес-логики внутри компонента.Это работа службы.Попробуйте сделать ваш компонент настолько глупым, насколько это возможно

...