У нас есть веб-часть 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.