From c83b053ccb952e95fad848c914126cbfadce5d26 Mon Sep 17 00:00:00 2001 From: xufenglei <xufenglei> Date: Tue, 12 Jun 2018 08:50:04 +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