AcquireToken снова перенаправляет на страницу входа в adal-angular4
Я использовал метод 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 ответ
Есть несколько известных способов решения этой проблемы. Вы можете перенаправить пользователя обратно на 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.
Пожалуйста, обратитесь к этой аналогичной теме и посмотрите, поможет ли это решить вашу проблему.