From 50223d066f7bb4446e47467463783b7f0170f889 Mon Sep 17 00:00:00 2001
From: fengxiang <110431245@qq.com>
Date: Wed, 06 Jun 2018 13:59:30 +0800
Subject: [PATCH] 登录失效拦截完善
---
src/app/core/net/default.interceptor.ts | 81 ++++++++++++++++++++++++++--------------
1 files changed, 52 insertions(+), 29 deletions(-)
diff --git a/src/app/core/net/default.interceptor.ts b/src/app/core/net/default.interceptor.ts
index 73e6979..e1b947f 100644
--- a/src/app/core/net/default.interceptor.ts
+++ b/src/app/core/net/default.interceptor.ts
@@ -21,25 +21,39 @@
*/
@Injectable()
export class DefaultInterceptor implements HttpInterceptor {
- private unLoginHandle: Subject<HttpErrorResponse> = new Subject<HttpErrorResponse>();
+ // private unLoginHandle: Subject<HttpErrorResponse> = new Subject<HttpErrorResponse>();
+
constructor(private injector: Injector) {
- this.unLoginHandle.debounceTime(100).subscribe(event => {
- if (!!event.error) {
- let errorMsg = '';
- const erroCode = <number>event.error['errorCode'];
- switch (erroCode) {
- case 10: errorMsg = '���������,���������'; break;
- case 11: errorMsg = '������������,���������������'; break;
- case 12: errorMsg = '������������,������������������'; break;
- }
- this.model.info({
- title: errorMsg,
- onOk: () => this.goTo('/passport/login')
- });
- }
- });
}
-
+ private isExpireModelShow = false;
+ private unLoginHandle(event: HttpErrorResponse) {
+ if (!!event.error) {
+ let errorMsg = '';
+ const erroCode = !!event.error['errorCode'] ? Number.parseInt(event.error['errorCode']) : 0;
+ switch (erroCode) {
+ case 10: errorMsg = '���������,���������'; break;
+ case 11: errorMsg = '������������,���������������'; break;
+ case 12: errorMsg = '������������,������������������'; break;
+ case 0: errorMsg = '���������������������������'; break;
+ default: errorMsg = '������������,���������������'; break;
+ }
+ if (!this.isExpireModelShow) {
+ this.isExpireModelShow = true;
+ // ������refresh���������������������
+ this.loginService.clearRefreshToken();
+ this.model.info({
+ title: errorMsg,
+ onOk: () => {
+ this.isExpireModelShow = false;
+ this.goTo('/passport/login');
+ }
+ });
+ }
+ }
+ }
+ get loginService(): LoginService {
+ return this.injector.get<LoginService>(LoginService);
+ }
get msg(): NzMessageService {
return this.injector.get(NzMessageService);
}
@@ -54,7 +68,8 @@
// ��������������� `throw` ������������������ `_HttpClient` ��� `end()` ������
// this.injector.get(_HttpClient).end();
// ���������������������������������
- switch (event.status) {
+ const status = !!event.status ? event.status : 401;
+ switch (status) {
case 200:
// ��������������������������������������������������� `status` ��������� `0` ���������������������
// ��������� `error_message` ������
@@ -69,8 +84,8 @@
break;
case 401: // ������������������
// this.goTo('/passport/login');
- if (location.hash && !location.hash.endsWith('login')) {
- this.unLoginHandle.next(<HttpErrorResponse>event);
+ if (!this.isLoginPage) {
+ this.unLoginHandle(<HttpErrorResponse>event);
}
break;
case 403:
@@ -86,13 +101,11 @@
return of(event);
}
}
-
+ private get isLoginPage(): boolean {
+ return !!location && !!location.hash && location.hash.endsWith('login');
+ }
intercept(req: HttpRequest<any>, next: HttpHandler):
- Observable<HttpSentEvent | HttpHeaderResponse | HttpProgressEvent | HttpResponse<any> | HttpUserEvent<any>> {
- if (!req.headers.get('X-Refrsh-Token')) {
- const loginService = <LoginService>this.injector.get(LoginService);
- loginService.refreshToken();
- }
+ Observable<HttpSentEvent | HttpHeaderResponse | HttpProgressEvent | HttpResponse<any> | HttpUserEvent<any>> {
// ���������������������������
let url = req.url;
if (!url.startsWith('https://') && !url.startsWith('http://') && !url.startsWith('assets')) {
@@ -106,12 +119,22 @@
return next.handle(newReq).pipe(
mergeMap((event: any) => {
// ������������������������������������������������������������������������������������������������HTTP������������������200������������������
- if (event instanceof HttpResponse && event.status === 200)
- return this.handleData(event);
+ if (event instanceof HttpResponse && event.status === 200) {
+ // ������token���������������������������
+ if (!this.isLoginPage
+ && !!newReq.headers
+ && !newReq.headers.get('X-Refrsh-Token')
+ && !url.startsWith('assets')) {
+ this.loginService.refreshToken();
+ }
+ return this.handleData(event);
+ }
// ������������������������������������
return of(event);
}),
- catchError((err: HttpErrorResponse) => this.handleData(err))
+ catchError((err: HttpErrorResponse) => {
+ return this.handleData(err);
+ })
);
}
}
--
Gitblit v1.8.0