11/* eslint-disable import/prefer-default-export */
2- import Cache from "@App/app/cache" ;
32import { ExtServer } from "@App/app/const" ;
43import { api } from "@App/pkg/axios" ;
54
@@ -8,7 +7,7 @@ type NetDiskType = "baidu";
87export function GetNetDiskToken ( netDiskType : NetDiskType ) : Promise < {
98 code : number ;
109 msg : string ;
11- data : { accessToken : string } ;
10+ data : { token : { accessToken : string ; refreshToken : string } } ;
1211} > {
1312 return api
1413 . get ( `/auth/net-disk/token?netDiskType=${ netDiskType } ` )
@@ -17,6 +16,24 @@ export function GetNetDiskToken(netDiskType: NetDiskType): Promise<{
1716 } ) ;
1817}
1918
19+ export function RefreshToken (
20+ netDiskType : NetDiskType ,
21+ refreshToken : string
22+ ) : Promise < {
23+ code : number ;
24+ msg : string ;
25+ data : { token : { accessToken : string ; refreshToken : string } } ;
26+ } > {
27+ return api
28+ . post ( `/auth/net-disk/token/refresh?netDiskType=${ netDiskType } ` , {
29+ netDiskType,
30+ refreshToken,
31+ } )
32+ . then ( ( resp ) => {
33+ return resp . data ;
34+ } ) ;
35+ }
36+
2037export function NetDisk ( netDiskType : NetDiskType ) {
2138 return new Promise < void > ( ( resolve ) => {
2239 const loginWindow = window . open (
@@ -36,27 +53,49 @@ export function NetDisk(netDiskType: NetDiskType) {
3653 } ) ;
3754}
3855
39- export async function AuthVerify ( netDiskType : NetDiskType , refresh ?: boolean ) {
40- if ( ! refresh ) {
41- const data = Cache . getInstance ( ) . get ( `netDiskToken:${ netDiskType } ` ) ;
42- // 大于一小时进行刷新
43- if ( data && Date . now ( ) - data . time < 3600000 ) {
44- return Promise . resolve ( data . data ) ;
45- }
56+ export type Token = {
57+ accessToken : string ;
58+ refreshToken : string ;
59+ createtime : number ;
60+ } ;
61+
62+ export async function AuthVerify ( netDiskType : NetDiskType , reapply ?: boolean ) {
63+ let token : Token | undefined ;
64+ try {
65+ token = JSON . parse ( localStorage [ `netdisk:token:${ netDiskType } ` ] ) ;
66+ } catch ( e ) {
67+ // ignore
4668 }
47- // 调用API查看是否已经验证过,否则进行重定向
48- let token = await GetNetDiskToken ( netDiskType ) ;
49- if ( token . code !== 0 ) {
50- // 申请
69+ if ( reapply || ! token || ! token . accessToken ) {
70+ // 强制重新获取token
5171 await NetDisk ( netDiskType ) ;
52- token = await GetNetDiskToken ( netDiskType ) ;
72+ const resp = await GetNetDiskToken ( netDiskType ) ;
73+ if ( resp . code !== 0 ) {
74+ return Promise . reject ( new Error ( resp . msg ) ) ;
75+ }
76+ token = {
77+ accessToken : resp . data . token . accessToken ,
78+ refreshToken : resp . data . token . refreshToken ,
79+ createtime : Date . now ( ) ,
80+ } ;
5381 }
54- if ( token . code !== 0 ) {
55- return Promise . reject ( new Error ( token . msg ) ) ;
82+ token . createtime = 0 ;
83+ if ( Date . now ( ) > token . createtime + 3600000 ) {
84+ // 大于一小时刷新token
85+ const resp = await RefreshToken ( netDiskType , token . refreshToken ) ;
86+ if ( resp . code !== 0 ) {
87+ // 刷新失败删除token
88+ localStorage . removeItem ( `netdisk:token:${ netDiskType } ` ) ;
89+ return Promise . reject ( new Error ( resp . msg ) ) ;
90+ }
91+ token = {
92+ accessToken : resp . data . token . accessToken ,
93+ refreshToken : resp . data . token . refreshToken ,
94+ createtime : Date . now ( ) ,
95+ } ;
96+ } else {
97+ return Promise . resolve ( token . accessToken ) ;
5698 }
57- Cache . getInstance ( ) . set ( `netDiskToken:${ netDiskType } ` , {
58- data : token . data ,
59- time : Date . now ( ) ,
60- } ) ;
61- return Promise . resolve ( token . data ) ;
99+ localStorage [ `netdisk:token:${ netDiskType } ` ] = JSON . stringify ( token ) ;
100+ return Promise . resolve ( token . accessToken ) ;
62101}
0 commit comments