fix(client): 修复登录会话自动续期

This commit is contained in:
2026-09-03 18:11:07 +08:00
parent 39e1c8e6ee
commit b3649c314a
9 changed files with 128 additions and 28 deletions
+58
View File
@@ -0,0 +1,58 @@
import assert from 'node:assert/strict'
import test from 'node:test'
import {
ACCESS_TOKEN_KEY,
REFRESH_TOKEN_KEY,
REMEMBERED_LOGIN_ID_KEY,
clearSessionTokens,
getRememberedLoginId,
persistRememberedLoginId,
persistTokenPair,
} from './session.ts'
function storage() {
const values = new Map()
return {
getItem: (key) => values.get(key) ?? null,
setItem: (key, value) => values.set(key, String(value)),
removeItem: (key) => values.delete(key),
}
}
function installStorage() {
globalThis.localStorage = storage()
globalThis.sessionStorage = storage()
}
test('persists the normal rotating session independently of remembered account preference', () => {
installStorage()
persistTokenPair({
tokenType: 'Bearer',
accessToken: 'access-token',
expiresIn: 1440,
refreshToken: 'refresh-token',
refreshExpiresIn: 604800,
})
assert.equal(localStorage.getItem(ACCESS_TOKEN_KEY), 'access-token')
assert.equal(localStorage.getItem(REFRESH_TOKEN_KEY), 'refresh-token')
assert.equal(sessionStorage.getItem(ACCESS_TOKEN_KEY), null)
assert.equal(sessionStorage.getItem(REFRESH_TOKEN_KEY), null)
})
test('remembers only the login id and keeps it when session tokens are cleared', () => {
installStorage()
persistRememberedLoginId('merchant-user', true)
localStorage.setItem(ACCESS_TOKEN_KEY, 'access-token')
localStorage.setItem(REFRESH_TOKEN_KEY, 'refresh-token')
clearSessionTokens()
assert.equal(getRememberedLoginId(), 'merchant-user')
assert.equal(localStorage.getItem(REMEMBERED_LOGIN_ID_KEY), 'merchant-user')
assert.equal(localStorage.getItem(ACCESS_TOKEN_KEY), null)
assert.equal(localStorage.getItem(REFRESH_TOKEN_KEY), null)
persistRememberedLoginId('merchant-user', false)
assert.equal(getRememberedLoginId(), '')
})