| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121 |
- /** 本地登录会话(无网络依赖,供 request / auth 共用,避免循环引用) */
- const TOKEN_KEY = 'zkxw_mobile_token'
- const REFRESH_TOKEN_KEY = 'zkxw_mobile_refresh_token'
- const USER_KEY = 'zkxw_mobile_user'
- const RETURN_URL_KEY = 'zkxw_mobile_return_url'
- export function setReturnUrl(url) {
- try {
- uni.setStorageSync(RETURN_URL_KEY, url || '')
- } catch (e) {
- /* ignore */
- }
- }
- export function takeReturnUrl() {
- try {
- const u = uni.getStorageSync(RETURN_URL_KEY) || ''
- uni.removeStorageSync(RETURN_URL_KEY)
- return typeof u === 'string' ? u : ''
- } catch (e) {
- return ''
- }
- }
- 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 */
- }
- }
- export function saveSession({ token, refreshToken, userInfo }) {
- uni.setStorageSync(TOKEN_KEY, token || '')
- uni.setStorageSync(REFRESH_TOKEN_KEY, refreshToken || '')
- uni.setStorageSync(USER_KEY, JSON.stringify(userInfo || null))
- }
- /** 更新本地缓存的用户信息(保留 token)。 */
- export function updateStoredUser(userInfo) {
- try {
- uni.setStorageSync(USER_KEY, JSON.stringify(userInfo || null))
- } catch (e) {
- /* ignore */
- }
- }
- let _reloginPending = false
- function isOnLoginPage() {
- try {
- const pages = getCurrentPages()
- const cur = pages && pages[pages.length - 1]
- const route = (cur && cur.route) || ''
- return String(route).indexOf('pages/login') !== -1
- } catch (e) {
- return false
- }
- }
- /**
- * Token 失效:清本地会话并回到登录页(防抖,避免并发 401 连跳)。
- * @param {string} [message]
- * @param {string} [returnUrl] 登录成功后回跳路径(写入本地,登录页 takeReturnUrl)
- */
- export function forceRelogin(message, returnUrl) {
- if (_reloginPending) return
- if (typeof returnUrl === 'string' && returnUrl.trim()) {
- setReturnUrl(returnUrl.trim())
- }
- clearSession()
- if (isOnLoginPage()) return
- _reloginPending = true
- const title =
- (typeof message === 'string' && message.trim()) ||
- '登录已失效,请重新登录'
- uni.showToast({ title, icon: 'none', duration: 2000 })
- setTimeout(() => {
- uni.reLaunch({
- url: '/pages/login/index',
- complete() {
- _reloginPending = false
- },
- fail() {
- _reloginPending = false
- }
- })
- }, 400)
- }
|