Compare commits

...

2 Commits

Author SHA1 Message Date
Stephen Zhou
18a6b4ac90 update response 2026-01-14 18:51:15 +08:00
Stephen Zhou
32bc319387 refactor: remove WebAppAccessToken 2026-01-14 17:44:18 +08:00
9 changed files with 5 additions and 44 deletions

View File

@@ -7,7 +7,7 @@ import AppUnavailable from '@/app/components/base/app-unavailable'
import Loading from '@/app/components/base/loading' import Loading from '@/app/components/base/loading'
import { useWebAppStore } from '@/context/web-app-context' import { useWebAppStore } from '@/context/web-app-context'
import { fetchAccessToken } from '@/service/share' import { fetchAccessToken } from '@/service/share'
import { setWebAppAccessToken, setWebAppPassport, webAppLoginStatus, webAppLogout } from '@/service/webapp-auth' import { setWebAppPassport, webAppLoginStatus, webAppLogout } from '@/service/webapp-auth'
const Splash: FC<PropsWithChildren> = ({ children }) => { const Splash: FC<PropsWithChildren> = ({ children }) => {
const { t } = useTranslation() const { t } = useTranslation()
@@ -40,9 +40,6 @@ const Splash: FC<PropsWithChildren> = ({ children }) => {
return return
} }
if (tokenFromUrl)
setWebAppAccessToken(tokenFromUrl)
const redirectOrFinish = () => { const redirectOrFinish = () => {
if (redirectUrl) if (redirectUrl)
router.replace(decodeURIComponent(redirectUrl)) router.replace(decodeURIComponent(redirectUrl))

View File

@@ -12,7 +12,7 @@ import { useLocale } from '@/context/i18n'
import { useWebAppStore } from '@/context/web-app-context' import { useWebAppStore } from '@/context/web-app-context'
import { sendWebAppEMailLoginCode, webAppEmailLoginWithCode } from '@/service/common' import { sendWebAppEMailLoginCode, webAppEmailLoginWithCode } from '@/service/common'
import { fetchAccessToken } from '@/service/share' import { fetchAccessToken } from '@/service/share'
import { setWebAppAccessToken, setWebAppPassport } from '@/service/webapp-auth' import { setWebAppPassport } from '@/service/webapp-auth'
import { encryptVerificationCode } from '@/utils/encryption' import { encryptVerificationCode } from '@/utils/encryption'
export default function CheckCode() { export default function CheckCode() {
@@ -66,9 +66,6 @@ export default function CheckCode() {
setIsLoading(true) setIsLoading(true)
const ret = await webAppEmailLoginWithCode({ email, code: encryptVerificationCode(code), token }) const ret = await webAppEmailLoginWithCode({ email, code: encryptVerificationCode(code), token })
if (ret.result === 'success') { if (ret.result === 'success') {
if (ret?.data?.access_token) {
setWebAppAccessToken(ret.data.access_token)
}
const { access_token } = await fetchAccessToken({ const { access_token } = await fetchAccessToken({
appCode: appCode!, appCode: appCode!,
userId: embeddedUserId || undefined, userId: embeddedUserId || undefined,

View File

@@ -12,7 +12,7 @@ import { useLocale } from '@/context/i18n'
import { useWebAppStore } from '@/context/web-app-context' import { useWebAppStore } from '@/context/web-app-context'
import { webAppLogin } from '@/service/common' import { webAppLogin } from '@/service/common'
import { fetchAccessToken } from '@/service/share' import { fetchAccessToken } from '@/service/share'
import { setWebAppAccessToken, setWebAppPassport } from '@/service/webapp-auth' import { setWebAppPassport } from '@/service/webapp-auth'
import { encryptPassword } from '@/utils/encryption' import { encryptPassword } from '@/utils/encryption'
type MailAndPasswordAuthProps = { type MailAndPasswordAuthProps = {
@@ -82,10 +82,6 @@ export default function MailAndPasswordAuth({ isEmailSetup }: MailAndPasswordAut
body: loginData, body: loginData,
}) })
if (res.result === 'success') { if (res.result === 'success') {
if (res?.data?.access_token) {
setWebAppAccessToken(res.data.access_token)
}
const { access_token } = await fetchAccessToken({ const { access_token } = await fetchAccessToken({
appCode: appCode!, appCode: appCode!,
userId: embeddedUserId || undefined, userId: embeddedUserId || undefined,

View File

@@ -11,7 +11,6 @@ import Toast from '@/app/components/base/toast'
import { emailRegex } from '@/config' import { emailRegex } from '@/config'
import { useLocale } from '@/context/i18n' import { useLocale } from '@/context/i18n'
import { login } from '@/service/common' import { login } from '@/service/common'
import { setWebAppAccessToken } from '@/service/webapp-auth'
import { encryptPassword } from '@/utils/encryption' import { encryptPassword } from '@/utils/encryption'
import { resolvePostLoginRedirect } from '../utils/post-login-redirect' import { resolvePostLoginRedirect } from '../utils/post-login-redirect'
@@ -65,10 +64,6 @@ export default function MailAndPasswordAuth({ isInvite, isEmailSetup, allowRegis
body: loginData, body: loginData,
}) })
if (res.result === 'success') { if (res.result === 'success') {
if (res?.data?.access_token) {
// Track login success event
setWebAppAccessToken(res.data.access_token)
}
trackEvent('user_login_success', { trackEvent('user_login_success', {
method: 'email_password', method: 'email_password',
is_invite: isInvite, is_invite: isInvite,

View File

@@ -179,7 +179,6 @@ export const CSRF_COOKIE_NAME = () => {
return isSecure ? '__Host-csrf_token' : 'csrf_token' return isSecure ? '__Host-csrf_token' : 'csrf_token'
} }
export const CSRF_HEADER_NAME = 'X-CSRF-Token' export const CSRF_HEADER_NAME = 'X-CSRF-Token'
export const ACCESS_TOKEN_LOCAL_STORAGE_NAME = 'access_token'
export const PASSPORT_LOCAL_STORAGE_NAME = (appCode: string) => `passport-${appCode}` export const PASSPORT_LOCAL_STORAGE_NAME = (appCode: string) => `passport-${appCode}`
export const PASSPORT_HEADER_NAME = 'X-App-Passport' export const PASSPORT_HEADER_NAME = 'X-App-Passport'

View File

@@ -38,7 +38,6 @@ import { del, get, patch, post, put } from './base'
type LoginSuccess = { type LoginSuccess = {
result: 'success' result: 'success'
data?: { access_token?: string }
} }
type LoginFail = { type LoginFail = {
result: 'fail' result: 'fail'

View File

@@ -4,7 +4,7 @@ import Cookies from 'js-cookie'
import ky from 'ky' import ky from 'ky'
import Toast from '@/app/components/base/toast' import Toast from '@/app/components/base/toast'
import { API_PREFIX, APP_VERSION, CSRF_COOKIE_NAME, CSRF_HEADER_NAME, IS_MARKETPLACE, MARKETPLACE_API_PREFIX, PASSPORT_HEADER_NAME, PUBLIC_API_PREFIX, WEB_APP_SHARE_CODE_HEADER_NAME } from '@/config' import { API_PREFIX, APP_VERSION, CSRF_COOKIE_NAME, CSRF_HEADER_NAME, IS_MARKETPLACE, MARKETPLACE_API_PREFIX, PASSPORT_HEADER_NAME, PUBLIC_API_PREFIX, WEB_APP_SHARE_CODE_HEADER_NAME } from '@/config'
import { getWebAppAccessToken, getWebAppPassport } from './webapp-auth' import { getWebAppPassport } from './webapp-auth'
const TIME_OUT = 100000 const TIME_OUT = 100000
@@ -93,11 +93,6 @@ const resolveShareCode = () => {
} }
const beforeRequestPublicWithCode = (request: Request) => { const beforeRequestPublicWithCode = (request: Request) => {
const accessToken = getWebAppAccessToken()
if (accessToken)
request.headers.set('Authorization', `Bearer ${accessToken}`)
else
request.headers.delete('Authorization')
const shareCode = resolveShareCode() const shareCode = resolveShareCode()
if (!shareCode) if (!shareCode)
return return

View File

@@ -42,7 +42,6 @@ import {
postPublic as post, postPublic as post,
ssePost, ssePost,
} from './base' } from './base'
import { getWebAppAccessToken } from './webapp-auth'
function getAction(action: 'get' | 'post' | 'del' | 'patch', isInstalledApp: boolean) { function getAction(action: 'get' | 'post' | 'del' | 'patch', isInstalledApp: boolean) {
switch (action) { switch (action) {
@@ -305,9 +304,6 @@ export const textToAudioStream = (url: string, isPublicAPI: boolean, header: { c
export const fetchAccessToken = async ({ userId, appCode }: { userId?: string, appCode: string }) => { export const fetchAccessToken = async ({ userId, appCode }: { userId?: string, appCode: string }) => {
const headers = new Headers() const headers = new Headers()
headers.append(WEB_APP_SHARE_CODE_HEADER_NAME, appCode) headers.append(WEB_APP_SHARE_CODE_HEADER_NAME, appCode)
const accessToken = getWebAppAccessToken()
if (accessToken)
headers.append('Authorization', `Bearer ${accessToken}`)
const params = new URLSearchParams() const params = new URLSearchParams()
if (userId) if (userId)
params.append('user_id', userId) params.append('user_id', userId)

View File

@@ -1,26 +1,14 @@
import { ACCESS_TOKEN_LOCAL_STORAGE_NAME, PASSPORT_LOCAL_STORAGE_NAME } from '@/config' import { PASSPORT_LOCAL_STORAGE_NAME } from '@/config'
import { getPublic, postPublic } from './base' import { getPublic, postPublic } from './base'
export function setWebAppAccessToken(token: string) {
localStorage.setItem(ACCESS_TOKEN_LOCAL_STORAGE_NAME, token)
}
export function setWebAppPassport(shareCode: string, token: string) { export function setWebAppPassport(shareCode: string, token: string) {
localStorage.setItem(PASSPORT_LOCAL_STORAGE_NAME(shareCode), token) localStorage.setItem(PASSPORT_LOCAL_STORAGE_NAME(shareCode), token)
} }
export function getWebAppAccessToken() {
return localStorage.getItem(ACCESS_TOKEN_LOCAL_STORAGE_NAME) || ''
}
export function getWebAppPassport(shareCode: string) { export function getWebAppPassport(shareCode: string) {
return localStorage.getItem(PASSPORT_LOCAL_STORAGE_NAME(shareCode)) || '' return localStorage.getItem(PASSPORT_LOCAL_STORAGE_NAME(shareCode)) || ''
} }
export function clearWebAppAccessToken() {
localStorage.removeItem(ACCESS_TOKEN_LOCAL_STORAGE_NAME)
}
export function clearWebAppPassport(shareCode: string) { export function clearWebAppPassport(shareCode: string) {
localStorage.removeItem(PASSPORT_LOCAL_STORAGE_NAME(shareCode)) localStorage.removeItem(PASSPORT_LOCAL_STORAGE_NAME(shareCode))
} }
@@ -44,7 +32,6 @@ export async function webAppLoginStatus(shareCode: string, userId?: string) {
} }
export async function webAppLogout(shareCode: string) { export async function webAppLogout(shareCode: string) {
clearWebAppAccessToken()
clearWebAppPassport(shareCode) clearWebAppPassport(shareCode)
await postPublic('/logout') await postPublic('/logout')
} }