Я создаю угловое приложение и для аутентификации пытаюсь реализовать AWS cognito.Все работает нормально, за исключением того, что когда я пытаюсь перейти после входа в систему, я попадаю на страницу, где вызывается служба, чтобы получить некоторые элементы.Здесь я получаю сообщение об ошибке «ОШИБКА TypeError: Невозможно прочитать свойство 'message' undefined в CatchSubscriber.selector (error-interceptor.ts: 17)".
Если я обновлю страницу после входа в систему, ошибки не будет.Сообщение свойства, вероятно, получено из метода getCars (), где я устанавливаю ожидаемый тип возврата из запроса Get HTPP.Я подписываюсь на метод, потому что у меня есть предмет, который поменял автомобили, который должен сказать другим частям, которые я назвал этим методом.Я получил это из учебника.Я также попытался изменить его, чтобы я не подписывался на сервис, но я возвращал наблюдаемое, не работало.
Я не совсем понимаю, что здесь происходит, я отсканировал Google и переполнение стека, узнал немного больше о наблюдаемых, но не смог найти ничего, что решило бы ошибку.Кто-нибудь может мне помочь здесь?
Версия угловая 6
Код службы аутентификации:
private session: CognitoUserSession;
private isAuthenticated = false;
private token: string;
private tokenTimer: any;
private authStatusListener = new Subject<boolean>();
signIn(email: string, password: string){
var userData = {
Username : email,
Pool : this.userPool
};
var authenticationData = {
Username : email,
Password : password,
};
var authenticationDetails = new AuthenticationDetails(authenticationData);
var cognitoUser = new CognitoUser(userData);
cognitoUser.authenticateUser(authenticationDetails, {
onSuccess: (result: any) => {
this.saveToken(result);
},
onFailure:(err: any) => {
console.log(err);
if(err.message){
alert(err.message);
}
this.authStatusListener.next(false);
},
mfaRequired: (codeDeliveryDetails: any) => {
var verificationCode = prompt('Please input verification code' ,'');
cognitoUser.sendMFACode(verificationCode, {
onSuccess: (result: any) => {
this.saveToken(result);
},
onFailure:(err: any) => {
console.log(err);
if(err.message){
alert(err.message);
}
this.authStatusListener.next(false);
}
});
}
});
}
saveToken(result: any){
this.session = result;
var accessToken = result.getAccessToken().getJwtToken();
const expiresInDuration = 3600;
this.setAuthenticateTimer(expiresInDuration);
this.isAuthenticated = true;
this.authStatusListener.next(true);
const now = new Date();
const expirationDate = new Date(now.getTime() + expiresInDuration * 1000);
this.saveAuthenticatedData(accessToken, expirationDate);
this.router.navigate(['/']);
}
Служба автомобилей:
carsChanged = new Subject<Car[]>();
private cars: Car[] = [];
constructor(private http: HttpClient, private router: Router) {}
getCars() {
this.http
.get<{message: string, cars: any}>(
BACKEND_URL)
.pipe(map((carData) => {
return carData.cars.map(car => {
return {
id: car._id,
brand: car.brand,
series: car.series,
infoDescription: car.infoDescription,
infoCommon: car.infoCommon,
priceNew: car.priceNew,
price: car.price,
advantage: car.advantage,
BTWRegime: car.BTWRegime,
infoFiscal: car.infoFiscal,
BIV: car.BIV,
roadTax: car.roadTax,
trumps: car.trumps,
options: car.options,
imagePaths: car.imagePaths
}
});
}))
.subscribe((transformedCars) =>{
this.cars = transformedCars;
this.carsChanged.next([...this.cars]);
});
}
Как я называю логин:
onSignIn(form: NgForm) {
if(form.invalid) {
return;
}
this.isLoading = true;
const email = form.value.email;
const password = form.value.password;
this.authService.signIn(email, password)
}
Как я вызываю автосервис:
cars: Car[] = [];
private subscription: Subscription;
isLoadingList = false;
constructor(private carService: CarService, private router: Router,
private route: ActivatedRoute) { }
ngOnInit() {
this.isLoadingList = true;
this.carService.getCars();
this.subscription = this.carService.carsChanged
.subscribe(
(cars: Car[]) => {
this.isLoadingList = false;
this.cars = cars;
}
);
}
Ошибка (только сразу после входа в систему, когда я обновляюсь после входа в систему, она работает нормально):
core.js: 1673 ОШИБКА TypeError: Невозможно прочитать свойство 'message' undefined в CatchSubscriber.selector (error-interceptor.ts: 17) в CatchSubscriber.push ../ node_modules / rxjs / _esm5 / internal /operator / catchError.js.CatchSubscriber.error (catchError.js: 34) в Observable.push ../ node_modules / rxjs / _esm5 / internal / Observable.js.Observable._trySubscribe (Observable.js: 49) в Observable.push../node_modules/rxjs/_esm5/internal/Observable.js.Observable.subscribe (Observable.js: 28) в CatchOperator.push ../ node_modules / rxjs / _esm5 / internal / operator / catchError.js.CatchOperator.call (catchError).js: 18) at Observable.push ../ node_modules / rxjs / _esm5 / internal / Observable.js.Observable.subscribe (Observable.js: 23) на subscribeTo.js.MergeMapSubscriber._innerSub (mergeMap.js: 73) в MergeMapSubscriber.push ../ node_modules / rxjs / _esm5 / internal / operator / mergeMap.js.MergeMapSubscriber._tryNext (mergeMap.js: 68)
10 в 10 * 10 * 10 *