ADAL SPFx getCachedUser всегда нулевой - PullRequest
0 голосов
/ 03 мая 2018

У нас есть веб-часть SPFx, работающая довольно хорошо, но даже если пользователь уже вошел в Office 365 при обращении к странице, содержащей веб-часть SPFx, - объект getCachedUser всегда имеет значение null. Это вызывает переадресацию для входа в систему, которая автоматически перенаправляет обратно на страницу нашего приложения.

Наш оригинальный PoC с прямым JavaScript никогда не делал этого, но веб-часть SPFx всегда перенаправляет при первом попадании.

Кто-нибудь видел и исправил это поведение? Что мы должны искать в нашей оболочке аутентификации?

Вот пример нашего кода:

import * as AuthenticationContext from 'adal-angular';
import '../WebPartAuthenticationContext';

constructor(props) {
    super(props);
    this.state = {
      detailModal: false,
      item: null,
      columns: [],
      rows: [],
      titleFilter: null,
      filterBy: 'givenName'
    };

    const config: IAdalConfig = {
      tenant: this.props.tenant,
      clientId: this.props.clientId,
      postLogoutRedirectUri: window.location.origin
    };
    config.webPartId = '<GUID>';
    config.popUp = false;
    config.callback = (error: any, token: string): void => {};
    this.authCtx = new AuthenticationContext(config);
    this.authCtx.handleWindowCallback();
    AuthenticationContext.prototype._singletonInstance = undefined;
}

private getRealItemsByAzureGraph(searchFor: string){
    var params = {
      'api-version': '1.6',
      '$filter': searchFor, 
      '$top' : '999'
    }; 
    var baseURL = 'https://graph.windows.net/myorganization/users?' + jquery.param(params);

    var user = this.authCtx.getCachedUser();
    if (user) {
      this.authCtx.acquireToken("https://graph.windows.net", (error, accessToken) => {
        if (error || !accessToken) { console.log(error); } 
        else {
          jquery.ajax({
            type: 'GET',
            url: baseURL,
            dataType: "json",
            headers: {
              'Authorization': 'Bearer ' + accessToken,
              'Accept': 'application/json'
            }
          }).done((data) => {
            var res = [];
            data.value.forEach((itm) => {
              if (itm.surname && itm.mail && itm.givenName && this.notInKeywords(itm)){
                if (this.props.showGuestUsers) {
                  res.push(itm);
                } else {
                  if (itm.userType !== "Guest") {
                    res.push(itm);
                  }
                }
              }
            });
            this.setState(
              {
                rows: res,
              }
            );
          }).fail((err) => {
            console.log(err.responseText);
          });
        }
      });
    } else {
      this.authCtx.login();
    }
}

Этот код (и другой поддерживающий код) прекрасно работает, мы просто не можем обойти перенаправление, даже если пользователь вошел в систему. Метод getCachedUser всегда имеет значение null / undefined.

...