From 43afaa6ad53ca4368fbc6426500f3f71f6f8b765 Mon Sep 17 00:00:00 2001
From: fengxiang <110431245@qq.com>
Date: Mon, 12 Mar 2018 09:02:31 +0800
Subject: [PATCH] 报表部分功能和token刷新

---
 src/app/business/services/http/login.service.ts |   66 +++++++++++++++++++++++++++++++-
 1 files changed, 63 insertions(+), 3 deletions(-)

diff --git a/src/app/business/services/http/login.service.ts b/src/app/business/services/http/login.service.ts
index 82db473..9432876 100644
--- a/src/app/business/services/http/login.service.ts
+++ b/src/app/business/services/http/login.service.ts
@@ -2,23 +2,57 @@
 import { HttpClient } from '@angular/common/http';
 import { environment } from 'environments/environment';
 import { Observable } from 'rxjs/Observable';
-import { Injectable } from '@angular/core';
+import { Injectable, Inject } from '@angular/core';
 import { UserContext } from '@business/entity/data';
 import { error } from 'selenium-webdriver';
+import { DA_SERVICE_TOKEN, ITokenService, LocalStorageStore } from '@delon/auth';
+import { Subject } from 'rxjs/Subject';
 
 @Injectable()
 export class LoginService {
-  public authorization: Authorization;
+
+  public authorization: Authorization = {token: null};
   public userContext: UserContext;
   private urls = {
     login: environment.SERVER_BASH_URL + 'auth/login',
+    refreshToken: environment.SERVER_BASH_URL + 'auth/token',
     userContext: environment.SERVER_BASH_URL + 'user-context',
   };
-  constructor(private http: HttpClient) { }
+  constructor(private http: HttpClient,
+    @Inject(DA_SERVICE_TOKEN) private tokenService: ITokenService) { 
+          // ���2���������������������token������������
+          setInterval(
+             () => {
+                 if (this.needFreshFromLocal && this.isReachRefreshTime()) {
+                        // ������������������
+                        this.setRefreshTime();
+                        // ������needfreshtoken
+                        localStorage.setItem('needRefreshToken', 'false');
+                        const _refreshToken =  this._refreshToken;                        
+                        if (!!_refreshToken) {
+                            this.http.get(this.urls.refreshToken, {headers: {'X-Refrsh-Token': 'Bearer ' + _refreshToken}} )
+                            .subscribe(
+                            res => {
+                              if (res['token'] != null) {
+                                  this.tokenService.set({'token': res ['token']});
+                                  console.log(new Date() + localStorage._token);
+                              }
+                            }
+                          );
+                      }
+                 }
+             }, 2000
+          );
+    }
   public validate(username: string, password: string): Observable<Authorization> {
       return this.http.post(this.urls.login, {username: username, password: password, mode: 'Web'}).map(
            (res: any) => {
                this.authorization = res;
+               const now = new Date();
+               // expiredTime,refreshToken,refreshTime ������������ token ������������
+               this.setRefreshTime();
+               localStorage.setItem('expiredTime', this.authorization.expiredTime.toString());
+               localStorage.setItem('refreshToken', this.authorization.refreshToken);
                return res;
            }
       );
@@ -31,4 +65,30 @@
         }
       );
   }
+  get _refreshToken(){
+    return !!this.authorization.refreshToken ? this.authorization.refreshToken : this.refreshTokenFromLocal;
+  }
+  get refreshTokenFromLocal(): string {
+      return localStorage.refreshToken;
+  }
+  get needFreshFromLocal(): boolean {
+     return localStorage.needRefreshToken === 'true';
+  }
+  private setRefreshTime() {
+          localStorage.setItem('refreshTime', new Date().getTime().toString());
+  }
+  private setNeedRefreshToken() {
+    localStorage.setItem('needRefreshToken', 'true');
+  }
+  private isReachRefreshTime(): boolean {
+        const expiredTime = Number(localStorage.expiredTime);
+        return !!this.refreshTime && !!expiredTime && this.refreshTime + (expiredTime / 2) * 60000 < new Date().getTime();
+  }
+  get refreshTime(): number  {
+    return  Number(localStorage.refreshTime);
+  }
+  public refreshToken () {
+           // ������������������token
+           this.setNeedRefreshToken();
+  }
 }

--
Gitblit v1.8.0