У меня есть веб-приложение Angular, которое использует @ microsoft / microsoft-graph-client для получения информации о зарегистрированном пользователе.@ azure / msal-angular используется для входа в систему пользователя.У меня есть служба авторизации, которая регистрирует пользователя с помощью этого:
async signIn(): Promise<void> {
const result = await this.msalService.loginPopup(OAuthSettings.consentScopes)
.catch((reason) => {
this.alertsService.add('Login failed', JSON.stringify(reason, null, 2));
});
if (result) {
this.authenticated = true;
await this.getUser();
}
}
private async getClient(): Promise<Client> {
const graphClient = Client.init({
// Initialize the Graph client with an auth
// provider that requests the token from the
// auth service
authProvider: async (done) => {
const token = await this.getAccessToken()
.catch((reason) => {
done(reason, null);
});
if (token) {
done(null, token);
} else {
done('Could not get an access token', null);
}
}
});
return graphClient;
}
private async getUser() {
if (!this.authenticated) {
return null;
}
const graphClient = await this.getClient();
// Get the user from Graph (GET /me)
const graphUser = await graphClient.api('/me').get();
console.log('USERNAME: ', graphUser.displayName);
sessionStorage.setItem('d365dataportal.user', graphUser);
if (graphUser.mail != null) {
sessionStorage.setItem('d365dataportal.user.email', graphUser.mail);
} else {
sessionStorage.setItem('d365dataportal.user.email', graphUser.userPrincipalName);
}
sessionStorage.setItem('d365dataportal.user.avatar', graphUser.avatar);
sessionStorage.setItem('d365dataportal.user.name', graphUser.displayName);
}
Мои OAuthSettings выглядят так:
export const OAuthSettings = {
appId: 'App GUID from Azure Here',
redirectUri: 'http://localhost:4200',
consentScopes: ['user.read',
'Directory.Read.All',
'Directory.ReadWrite.All',
'Directory.AccessAsUser.All']
};
Проблема, с которой я сталкиваюсь, заключается в том, что при this.msalService.Вызывается loginPopup (), все приложение зависает, всплывающее окно никогда не закрывается и никогда не проверяет подлинность и не перенаправляет обратно на мою страницу.Я не уверен, почему это происходит.Может кто-нибудь увидеть какие-либо явные ошибки?
РЕДАКТИРОВАТЬ
Я оставляю содержание выше, потому что это был мой оригинальный вопрос.Я понял, что проблема не имеет ничего общего с моим первоначальным названием, и изменил название вопроса.