优化
This commit is contained in:
@@ -66,6 +66,20 @@ function loginResponse(accessToken = token(), refreshToken = 'refresh-next') {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function domesticOnlyLoginResponse() {
|
||||||
|
return {
|
||||||
|
code: '200',
|
||||||
|
message: 'success',
|
||||||
|
data: {
|
||||||
|
tokenType: 'Bearer',
|
||||||
|
accessToken: token(),
|
||||||
|
expiresIn: 1800,
|
||||||
|
refreshToken: 'refresh-domestic',
|
||||||
|
refreshExpiresIn: 604800,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
describe('admin auth session', () => {
|
describe('admin auth session', () => {
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
vi.stubGlobal('localStorage', createMemoryStorage())
|
vi.stubGlobal('localStorage', createMemoryStorage())
|
||||||
@@ -75,6 +89,17 @@ describe('admin auth session', () => {
|
|||||||
mocks.refreshHandler = null
|
mocks.refreshHandler = null
|
||||||
})
|
})
|
||||||
|
|
||||||
|
it('accepts a domestic-only token response when the test environment has no overseas services', async () => {
|
||||||
|
mocks.post.mockResolvedValue(domesticOnlyLoginResponse())
|
||||||
|
mocks.listCurrentPlatformPermissionCodes.mockResolvedValue(['platform:warehouse:list'])
|
||||||
|
const auth = useAuthStore()
|
||||||
|
|
||||||
|
await auth.login('platform_admin', 'password')
|
||||||
|
|
||||||
|
expect(auth.isAuthenticated).toBe(true)
|
||||||
|
expect(auth.refreshToken).toBe('refresh-domestic')
|
||||||
|
})
|
||||||
|
|
||||||
it('loads permissions from the current authorization endpoint when the JWT only contains identity', async () => {
|
it('loads permissions from the current authorization endpoint when the JWT only contains identity', async () => {
|
||||||
mocks.post.mockResolvedValue(loginResponse())
|
mocks.post.mockResolvedValue(loginResponse())
|
||||||
mocks.listCurrentPlatformPermissionCodes.mockResolvedValue(['platform:warehouse:list'])
|
mocks.listCurrentPlatformPermissionCodes.mockResolvedValue(['platform:warehouse:list'])
|
||||||
|
|||||||
@@ -24,8 +24,8 @@ interface LoginResponse {
|
|||||||
expiresIn: number
|
expiresIn: number
|
||||||
refreshToken: string
|
refreshToken: string
|
||||||
refreshExpiresIn: number
|
refreshExpiresIn: number
|
||||||
overseasAccessToken: string | null
|
overseasAccessToken?: string | null
|
||||||
overseasExpiresIn: number
|
overseasExpiresIn?: number
|
||||||
}
|
}
|
||||||
|
|
||||||
class ExpiredAccessTokenError extends Error {}
|
class ExpiredAccessTokenError extends Error {}
|
||||||
@@ -90,7 +90,10 @@ export const useAuthStore = defineStore('admin-auth', () => {
|
|||||||
async function applySession(result: LoginResponse, expectedGeneration: number) {
|
async function applySession(result: LoginResponse, expectedGeneration: number) {
|
||||||
const session = sessionFromToken(result.accessToken)
|
const session = sessionFromToken(result.accessToken)
|
||||||
ensureCurrentGeneration(expectedGeneration)
|
ensureCurrentGeneration(expectedGeneration)
|
||||||
replaceOverseasAccessToken(result.overseasAccessToken, result.overseasExpiresIn)
|
replaceOverseasAccessToken(
|
||||||
|
result.overseasAccessToken ?? null,
|
||||||
|
result.overseasExpiresIn ?? 0,
|
||||||
|
)
|
||||||
token.value = result.accessToken
|
token.value = result.accessToken
|
||||||
refreshToken.value = result.refreshToken
|
refreshToken.value = result.refreshToken
|
||||||
user.value = session.user
|
user.value = session.user
|
||||||
|
|||||||
Reference in New Issue
Block a user