实现登录态自动续期并优化扫码兼容性
This commit is contained in:
@@ -6,7 +6,15 @@ import {
|
||||
type OrganizationMemberInfo
|
||||
} from '@/api/auth'
|
||||
import type { TokenResponse } from '@/types/api'
|
||||
import { AUTH_EXPIRED_EVENT, AUTH_STORAGE_KEYS, clearAuthStorage } from '@/utils/authStorage'
|
||||
import {
|
||||
AUTH_EXPIRED_EVENT,
|
||||
AUTH_STORAGE_KEYS,
|
||||
AUTH_TOKEN_UPDATED_EVENT,
|
||||
clearAuthStorage,
|
||||
persistAuthToken,
|
||||
readStoredAccessToken,
|
||||
readStoredRefreshToken
|
||||
} from '@/utils/authStorage'
|
||||
import { env } from '@/utils/env'
|
||||
|
||||
export interface StaffUser {
|
||||
@@ -46,8 +54,9 @@ export const useAuthStore = defineStore('auth', () => {
|
||||
const hasOrganization = computed(() => Boolean(memberInfo.value?.organizationId))
|
||||
|
||||
const persistToken = (payload: TokenResponse, phone: string) => {
|
||||
token.value = payload.access_token
|
||||
refreshToken.value = payload.refresh_token || ''
|
||||
const storedToken = persistAuthToken(payload)
|
||||
token.value = storedToken.accessToken
|
||||
refreshToken.value = storedToken.refreshToken
|
||||
user.value = {
|
||||
id: payload.user_id,
|
||||
username: payload.username || phone,
|
||||
@@ -55,10 +64,6 @@ export const useAuthStore = defineStore('auth', () => {
|
||||
tenantId: payload.tenant_id
|
||||
}
|
||||
|
||||
localStorage.setItem(AUTH_STORAGE_KEYS.token, token.value)
|
||||
if (refreshToken.value) {
|
||||
localStorage.setItem(AUTH_STORAGE_KEYS.refreshToken, refreshToken.value)
|
||||
}
|
||||
localStorage.setItem(AUTH_STORAGE_KEYS.user, JSON.stringify(user.value))
|
||||
}
|
||||
|
||||
@@ -85,6 +90,11 @@ export const useAuthStore = defineStore('auth', () => {
|
||||
memberInfo.value = null
|
||||
}
|
||||
|
||||
const syncStoredToken = () => {
|
||||
token.value = readStoredAccessToken()
|
||||
refreshToken.value = readStoredRefreshToken()
|
||||
}
|
||||
|
||||
const logout = () => {
|
||||
resetState()
|
||||
clearAuthStorage()
|
||||
@@ -92,6 +102,7 @@ export const useAuthStore = defineStore('auth', () => {
|
||||
|
||||
if (typeof window !== 'undefined') {
|
||||
window.addEventListener(AUTH_EXPIRED_EVENT, resetState)
|
||||
window.addEventListener(AUTH_TOKEN_UPDATED_EVENT, syncStoredToken)
|
||||
}
|
||||
|
||||
return {
|
||||
|
||||
Reference in New Issue
Block a user