From b7aa850069d53ca1cc2aea791e7401216f5b795c Mon Sep 17 00:00:00 2001 From: fengxiang <110431245@qq.com> Date: Mon, 19 Mar 2018 16:44:07 +0800 Subject: [PATCH] 数据查看 --- 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