首先,封装一个 auth 工具,提供初始化持久化用户信息方法,首页初始化用户,登录后存储用户,使用导出的 key。
1.封装auth工具
export interface User {
token: string
nickname: string
avatar: string
account: string
}
class Auth {
KEY: string = 'user'
//在入口页面中初始化用户信息
initUser() {
PersistentStorage.persistProp(this.KEY, {} as User)
}
/**
* 获取用户信息
*/
getUser() {
return AppStorage.get<User>(this.KEY) || {} as User
}
/**
* 存储用户信息
*/
saveUser(user: User) {
AppStorage.setOrCreate(this.KEY, user)
}
/**
*删除用户信息
*/
removeUser() {
AppStorage.setOrCreate(this.KEY, {} as User)
}
}
export const auth = new Auth()
2.在EntryAbility中入口页面初始化用户信息
windowStage.loadContent('pages/Index', () => {
auth.initUser()
})
token是用户是否登录的凭证,我们可以通过是否有token判断用户是否登录,如果登录,在app每次请求中携带token凭证。
// 请求拦截器
instance.interceptors.request.use((config: InternalAxiosRequestConfig) => {
const user = auth.getUser()
//每次请求的时候携带登录凭证 token
if (user.token) {
config.headers.Authorization = `Bearer ${user.token}`
}
return config
}, (err: AxiosError) => {
return Promise.reject(err)
})
如果token失效(状态码401代表token失效)则需要跳转到登录页,让用户登录。
// 添加响应拦截器
// 错误统一处理等
instance.interceptors.response.use((response: AxiosResponse) => {
return response
}, (error: AxiosError<APIErrorType>) => {
// token过期, status(401) -> 清除用户信息, 拦截去登录页
if (error.response?.status === 401) {
// 删除用户信息 去登录页
auth.removeUser()
router.pushUrl({
url: 'pages/LoginPage'
})
} else {
promptAction.showToast({ message: error.response?.data.message })
}
return Promise.reject(error)
})
标签:return,登录,实现,用户,auth,HarmonyOS,token,user
From: https://blog.csdn.net/LexinZong/article/details/141868915