WebApi и Angular 2+ - Аутентификация - Срок действия токена истек - Вернуться к входу в систему - PullRequest
0 голосов
/ 27 сентября 2018

У меня угловое клиентское приложение, защищенное логином.Когда я вхожу в систему, веб-интерфейс возвращает мне токен доступа, срок действия которого истекает через x минут.Когда токен доступа истек, я хочу вернуться к логину, но я не понимаю, как это сделать.

Это мой класс ErrorInterceptor:

@Injectable()
export class ErrorInterceptor implements HttpInterceptor {
constructor(private authenticationService: AuthenticationService) {}

intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
    return next.handle(request).pipe(catchError(err => {
        if (err.status === 401) {
            // auto logout if 401 response returned from api
            this.authenticationService.logout();                
            location.reload(true);
        }

        const error = err.error.message || err.statusText;
        return throwError(error);
    }))
  }
}

Но когда токен истек, ничего не происходит.

Кто-нибудь может дать мне совет?Заранее спасибо

1 Ответ

0 голосов
/ 27 сентября 2018

Использовать HttpInterceptor:

https://angular.io/api/common/http/HttpInterceptor

В Angular создайте Interceptor, который будет проверять errStatus 401 (Unauthorized).

@Injectable()
export class ErrorInterceptor implements HttpInterceptor {
    constructor(private logoutService: LogoutService) { /* empty */ }

    public intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
        return next.handle(req).catch((err: HttpErrorResponse) => {
            if (err && err.status) {

                this.handleRequestErrors(err.status);
            }

            return Observable.throw(err);
        });
    }

    /**
     * handleRequestErrors
     * @param err: The HTTP Error Code Status
     */
    private handleRequestErrors(errStatus: number) {
        switch (errStatus) {
            case 401: { // Unauthorized
                this.logoutService.removeStoredAuthentication();
                break;
            }
        }
    }
}
...