AcquireToken снова перенаправляет на страницу входа в adal-angular4 - PullRequest
0 голосов
/ 17 декабря 2018

Я использовал handleWindowCallback () метод на моей странице входа в систему, потому что, когда я вошел в систему, страница входа в систему проверяет аутентификацию и перенаправляется на страницу панели инструментов.Работает нормально, без каких-либо недостатков.

Но когда я пытаюсь получить данные снова с помощью acquToken, приложение перенаправляет на страницу входа, это происходит только в первый раз.Это вызывает задержку в рендеринге контента.

LoginComponent.ts

ngOnInit() {
    this.webService.handleWindowCallback();
    console.log(this.webService.authenticate);
    if (this.webService.authenticate) {
      console.log('Redirecting to dashboard');
      this.router.navigate(['/', 'dashboard']);
    }
    console.log('login loaded');
  }

dashboardComponent.ts

ngOnInit() {
    this.showLoader = true;
    this.webService.getUser();
    this.getdata();
    console.log('content loaded');
  }

getdata() {
    const listname = 'Tenets';
    const queryParams = '?$filter=Title eq \'Dashboard\'&$select=Title,Description,Small_x0020_Text,Large_x0020_Text';
    this.webService.getdata(listname, queryParams).subscribe(data => {
      // debugger;
      console.log(data);
      console.log('content loading');
      Object.keys(data['value']).forEach(ele => {
        this.dashboardItems.push({
          'link': data['value'][ele]['Description'],
          'smallText': data['value'][ele]['Small_x0020_Text'],
          'largeText': data['value'][ele]['Large_x0020_Text']
        });
      });
    });
  }

Webservice.ts

getdata(listname, queryParams): Observable<any> {
    const url = environment.config.spUrl + environment.config.spSiteCollection
      + '_api/web/lists/getByTitle(\'' + listname + '\')/items' + queryParams;
    return this.adalService.acquireToken(environment.config.spUrl).flatMap(
      token => {
        const headersParam = new HttpHeaders({
          'Content-Type': 'application/json;odata=verbose',
          'Authorization': 'Bearer ' + token.toString()
        });
        return this.http.get(url, { headers: headersParam });
      });
  }

Мне нужно получить данные во времяngOnInit () getdata (), который должен загрузиться один раз, и он будет отображать содержимое без повторного перенаправления на loginComponent.

Пожалуйста, помогите решить эту проблему.Это уже съел мои 2 дня.

1 Ответ

0 голосов
/ 01 января 2019

Есть несколько известных способов решения этой проблемы.Вы можете перенаправить пользователя обратно на URI перенаправления, а не на loginStartPage, заполнив loginStartPage из adal.config.redurectURI.

Вы также можете обрабатывать навигацию в компоненте обратного вызова, чтобы установить токен и информацию о пользователе ADAL..

handleCallback(hash: string) {
    if (!this.context.isCallback(hash))
        return;

    var requestInfo = this.context.getRequestInfo(hash);
    if (requestInfo.valid)
        this.context.saveTokenFromHash(requestInfo); //Save the token and user information.  
}

Получить пользователя можно с помощью функции context.getCachedUser () в компоненте обратного вызова, который затем переходит на нужную страницу.

Код обратного вызова:

  this.adalService.handleCallback(window.location.hash);
if (this.adalService.userInfo)
    this.router.navigate(['dashboard']); //Navigate to user dashboard
else
    this.router.navigate(['']); //Navigate to home page.

Пожалуйста, обратитесь к этой аналогичной теме и посмотрите, поможет ли это решить вашу проблему.

...