我创建了一个Angular 9 Web应用程序,该应用程序使用AWS Cognito处理用户登录和会话。但是,当经过身份验证的用户尝试在令牌过期后(即1小时后)加载网页时,我会在通过getCurrentUser()检索CognitoUser属性后检索并收到错误消息。
我开发了一个名为“ api”的服务,该服务通过getAuthenticatedUser()函数返回CognitoUser:
api.service.ts:
getAuthenticatedUser(): Observable<CognitoUser> {
const myUser = userPool.getCurrentUser();
if (myUser != null) {
//Do some stuff <-- THIS IS ALWAYS SUCCESSFULLY EXECUTED
} else {
console.log('Returned null!!');
}
const result = new BehaviorSubject(myUser);
result.next(myUser);
return result; }
然后我在第一个加载的组件的ngOnInit期间调用此函数:
login.component.ts:
ngOnInit() {
this.api.getAuthenticatedUser().subscribe(authenticatedUser => {
console.log('login')
console.log(authenticatedUser);
console.log(authenticatedUser['signInUserSession']); // <-- THIS RETURNS NULL WHEN FIRST LOADED
console.log(authenticatedUser['signInUserSession']['idToken']); // FOR SOME REASON THIS IS NOT EXECUTED THE FIRST TIME
// --> THE LINE BELOW RETURNS AN ERROR
if (authenticatedUser && authenticatedUser.hasOwnProperty('signInUserSession')) {
//Do some stuff
} else {
//Do other stuff
}
}
}); }
由于某种原因,我能够检索和打印值“ authenticatedUser”,但不能打印以下值。另外,当我到达if语句时,我收到一条错误消息,指出authenticatedUser不应为空时显示为空:
Console logs prior to user refresh
但是,在刷新页面后,即使检索到的项目看起来相同,一切也会按预期进行:
Console logs after simple browser refresh
您知道什么可能导致这种行为吗?我觉得我缺少一些我应该订阅的异步功能。
请让我知道是否需要其他信息