浏览代码

fix: explicitly use new token when retrying ssePost after refresh (#10864)

Co-authored-by: liusurong.lsr <liusurong.lsr@alibaba-inc.com>
llinvokerl 5 月之前
父节点
当前提交
d6ea1e2f12
共有 1 个文件被更改,包括 24 次插入33 次删除
  1. 24 33
      web/service/base.ts

+ 24 - 33
web/service/base.ts

@@ -124,6 +124,24 @@ function requiredWebSSOLogin() {
   globalThis.location.href = `/webapp-signin?redirect_url=${globalThis.location.pathname}`
   globalThis.location.href = `/webapp-signin?redirect_url=${globalThis.location.pathname}`
 }
 }
 
 
+function getAccessToken(isPublicAPI?: boolean) {
+  if (isPublicAPI) {
+    const sharedToken = globalThis.location.pathname.split('/').slice(-1)[0]
+    const accessToken = localStorage.getItem('token') || JSON.stringify({ [sharedToken]: '' })
+    let accessTokenJson = { [sharedToken]: '' }
+    try {
+      accessTokenJson = JSON.parse(accessToken)
+    }
+    catch (e) {
+
+    }
+    return accessTokenJson[sharedToken]
+  }
+  else {
+    return localStorage.getItem('console_token') || ''
+  }
+}
+
 export function format(text: string) {
 export function format(text: string) {
   let res = text.trim()
   let res = text.trim()
   if (res.startsWith('\n'))
   if (res.startsWith('\n'))
@@ -295,22 +313,8 @@ const baseFetch = <T>(
     getAbortController(abortController)
     getAbortController(abortController)
     options.signal = abortController.signal
     options.signal = abortController.signal
   }
   }
-  if (isPublicAPI) {
-    const sharedToken = globalThis.location.pathname.split('/').slice(-1)[0]
-    const accessToken = localStorage.getItem('token') || JSON.stringify({ [sharedToken]: '' })
-    let accessTokenJson = { [sharedToken]: '' }
-    try {
-      accessTokenJson = JSON.parse(accessToken)
-    }
-    catch (e) {
-
-    }
-    options.headers.set('Authorization', `Bearer ${accessTokenJson[sharedToken]}`)
-  }
-  else {
-    const accessToken = localStorage.getItem('console_token') || ''
-    options.headers.set('Authorization', `Bearer ${accessToken}`)
-  }
+  const accessToken = getAccessToken(isPublicAPI)
+  options.headers.set('Authorization', `Bearer ${accessToken}`)
 
 
   if (deleteContentType) {
   if (deleteContentType) {
     options.headers.delete('Content-Type')
     options.headers.delete('Content-Type')
@@ -403,23 +407,7 @@ const baseFetch = <T>(
 
 
 export const upload = (options: any, isPublicAPI?: boolean, url?: string, searchParams?: string): Promise<any> => {
 export const upload = (options: any, isPublicAPI?: boolean, url?: string, searchParams?: string): Promise<any> => {
   const urlPrefix = isPublicAPI ? PUBLIC_API_PREFIX : API_PREFIX
   const urlPrefix = isPublicAPI ? PUBLIC_API_PREFIX : API_PREFIX
-  let token = ''
-  if (isPublicAPI) {
-    const sharedToken = globalThis.location.pathname.split('/').slice(-1)[0]
-    const accessToken = localStorage.getItem('token') || JSON.stringify({ [sharedToken]: '' })
-    let accessTokenJson = { [sharedToken]: '' }
-    try {
-      accessTokenJson = JSON.parse(accessToken)
-    }
-    catch (e) {
-
-    }
-    token = accessTokenJson[sharedToken]
-  }
-  else {
-    const accessToken = localStorage.getItem('console_token') || ''
-    token = accessToken
-  }
+  const token = getAccessToken(isPublicAPI)
   const defaultOptions = {
   const defaultOptions = {
     method: 'POST',
     method: 'POST',
     url: (url ? `${urlPrefix}${url}` : `${urlPrefix}/files/upload`) + (searchParams || ''),
     url: (url ? `${urlPrefix}${url}` : `${urlPrefix}/files/upload`) + (searchParams || ''),
@@ -505,6 +493,9 @@ export const ssePost = (
   if (body)
   if (body)
     options.body = JSON.stringify(body)
     options.body = JSON.stringify(body)
 
 
+  const accessToken = getAccessToken(isPublicAPI)
+  options.headers.set('Authorization', `Bearer ${accessToken}`)
+
   globalThis.fetch(urlWithPrefix, options as RequestInit)
   globalThis.fetch(urlWithPrefix, options as RequestInit)
     .then((res) => {
     .then((res) => {
       if (!/^(2|3)\d{2}$/.test(String(res.status))) {
       if (!/^(2|3)\d{2}$/.test(String(res.status))) {