92 lines
2.1 KiB
JavaScript
92 lines
2.1 KiB
JavaScript
import { validateCredentials } from './validate-credentials.js'
|
|
import { buildEncryptedLoginBody } from './login-rsa.js'
|
|
import { post } from './request.js'
|
|
|
|
export { validateCredentials }
|
|
|
|
const TOKEN_KEY = 'zkxw_mobile_token'
|
|
const REFRESH_TOKEN_KEY = 'zkxw_mobile_refresh_token'
|
|
const USER_KEY = 'zkxw_mobile_user'
|
|
|
|
export function getToken() {
|
|
try {
|
|
return uni.getStorageSync(TOKEN_KEY) || ''
|
|
} catch (e) {
|
|
return ''
|
|
}
|
|
}
|
|
|
|
export function getRefreshToken() {
|
|
try {
|
|
return uni.getStorageSync(REFRESH_TOKEN_KEY) || ''
|
|
} catch (e) {
|
|
return ''
|
|
}
|
|
}
|
|
|
|
export function isLoggedIn() {
|
|
return !!getToken()
|
|
}
|
|
|
|
export function getUser() {
|
|
try {
|
|
const raw = uni.getStorageSync(USER_KEY)
|
|
return raw ? JSON.parse(raw) : null
|
|
} catch (e) {
|
|
return null
|
|
}
|
|
}
|
|
|
|
export function clearSession() {
|
|
try {
|
|
uni.removeStorageSync(TOKEN_KEY)
|
|
uni.removeStorageSync(REFRESH_TOKEN_KEY)
|
|
uni.removeStorageSync(USER_KEY)
|
|
} catch (e) {
|
|
/* ignore */
|
|
}
|
|
}
|
|
|
|
function saveSession({ token, refreshToken, userInfo }) {
|
|
uni.setStorageSync(TOKEN_KEY, token || '')
|
|
uni.setStorageSync(REFRESH_TOKEN_KEY, refreshToken || '')
|
|
uni.setStorageSync(USER_KEY, JSON.stringify(userInfo || null))
|
|
}
|
|
|
|
/**
|
|
* 可选:清除历史 mock_ 前缀假会话,避免误判已登录。
|
|
*/
|
|
export function clearLegacyMockSessionIfNeeded() {
|
|
const token = getToken()
|
|
if (typeof token === 'string' && token.indexOf('mock_') === 0) {
|
|
clearSession()
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 真实账号密码登录。
|
|
* @param {{ username: string, password: string }} params
|
|
*/
|
|
export async function passwordLogin({ username, password }) {
|
|
const v = validateCredentials(username, password)
|
|
if (!v.ok) {
|
|
const err = new Error(v.message)
|
|
err.code = v.code
|
|
throw err
|
|
}
|
|
const body = await buildEncryptedLoginBody(
|
|
(username || '').trim(),
|
|
password || ''
|
|
)
|
|
const data = await post('/web/auth/login', body)
|
|
if (!data || !data.token) {
|
|
throw new Error('登录失败')
|
|
}
|
|
saveSession({
|
|
token: data.token,
|
|
refreshToken: data.refreshToken,
|
|
userInfo: data.userInfo
|
|
})
|
|
return data
|
|
}
|