Код ниже показывает перехватчик. Когда код статуса 401, я хочу перенаправить пользователя на экран входа в систему и показать сообщение «Пароль или имя пользователя недействительны». Как мне этого добиться?
Потому что, если я направлю пользователя на экран входа в систему, будет ли когда-нибудь вызываться return returnError? А также, есть ли способ проверить это?
Перехватчик:
intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
return next.handle(request).pipe(
catchError(err => {
let errorMessage = '';
if(err instanceof HttpErrorResponse) { // server side error
switch (err.status) {
case 401: //login
errorMessage = `Username or password not found`;
this.authenticationService.logout(); // removes session data (if there are any)
this.router.navigate(['/login']);
break;
}
return throwError(errorMessage);
}
}
))
}
LoginServiceMethod:
login(username: string, password: string): Observable<any> {
return this.http.post<User>(`https://test/login`, { username, password })
.pipe(
map(user => {
// store user details and jwt token in local storage to keep user logged in between page refreshes
localStorage.setItem('currentUser', JSON.stringify(user));
this.currentUserSubject.next(user);
this.toast.success(user.username + ' logged in');
return user;
}));
}
ComponentLoginMethod:
this.authenticationService.login(username, password)
.pipe(first())
.subscribe(
data => {
this.router.navigate([this.returnUrl]);
},
error => {
console.error("blabla" + error);
}
);
}