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