From 9200567a17b5a567ed14529fa0208618b4867938 Mon Sep 17 00:00:00 2001
From: fengxiang <110431245@qq.com>
Date: Thu, 05 Jul 2018 16:03:25 +0800
Subject: [PATCH] 设备型号配置优化
---
src/app/business/services/http/login.service.ts | 84 ++++++++++++++++++++++++++++++++++++++++-
1 files changed, 81 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..989d7d7 100644
--- a/src/app/business/services/http/login.service.ts
+++ b/src/app/business/services/http/login.service.ts
@@ -2,23 +2,59 @@
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.canRefreshToken()
+ && this.needFreshFromLocal
+ && this.isReachRefreshTime()) {
+ const _refreshToken = this._refreshToken;
+ // ������������������
+ this.setRefreshTime();
+ // ������needfreshtoken
+ localStorage.setItem('needRefreshToken', 'false');
+ 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', String(this.authorization.expiredTime));
+ localStorage.setItem('refreshToken', this.authorization.refreshToken);
return res;
}
);
@@ -31,4 +67,46 @@
}
);
}
+ 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();
+ }
+ private get refreshTime(): number {
+ return Number(localStorage.refreshTime);
+ }
+ public clearRefreshToken() {
+ localStorage.expiredTime = null;
+ localStorage.refreshTime = null;
+ localStorage.refreshToken = null;
+ this.authorization = null;
+ localStorage.removeItem('expiredTime');
+ localStorage.removeItem('refreshTime');
+ localStorage.removeItem('refreshToken');
+ }
+ private canRefreshToken() {
+ return !!localStorage.getItem('expiredTime')
+ && !!localStorage.getItem('refreshTime')
+ && !!localStorage.getItem('refreshToken');
+ }
+ public refreshToken () {
+ if (this.canRefreshToken()) {
+ // ������������������token
+ this.setNeedRefreshToken();
+ }
+ }
}
--
Gitblit v1.8.0