From 6a1dd6c9193efa942a4312785b4457397c23b61e Mon Sep 17 00:00:00 2001
From: fengxiang <110431245@qq.com>
Date: Fri, 23 Mar 2018 16:38:05 +0800
Subject: [PATCH] 编译不通过 bug 修复
---
src/app/business/services/http/login.service.ts | 82 +++++++++++++++++++++++++++++++++++-----
1 files changed, 71 insertions(+), 11 deletions(-)
diff --git a/src/app/business/services/http/login.service.ts b/src/app/business/services/http/login.service.ts
index d84f47a..1889d2b 100644
--- a/src/app/business/services/http/login.service.ts
+++ b/src/app/business/services/http/login.service.ts
@@ -2,33 +2,93 @@
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 userContext:UserContext;
+
+ public authorization: Authorization = {token: null};
+ public userContext: UserContext;
private urls = {
- login:environment.SERVER_BASH_URL+'/auth/login',
- userContext:environment.SERVER_BASH_URL+'/user-context',
+ 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) { }
- public validate(username:string,password:string):Observable<Authorization>{
- return this.http.post(this.urls.login,{username:username,password:password,mode:"Web"}).map(
- (res:any) => {
+ 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', String(this.authorization.expiredTime));
+ localStorage.setItem('refreshToken', this.authorization.refreshToken);
return res;
}
);
}
- public loadUserContext():void{
+ public loadUserContext(): void {
this.http.get(this.urls.userContext).subscribe(
- (res:UserContext) => {
+ (res: UserContext) => {
this.userContext = res;
return res;
}
);
}
+ 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