Add new components for login and comment functionality
This commit is contained in:
@ -1,133 +1,75 @@
|
||||
import axios, { AxiosRequestConfig, AxiosInstance, AxiosResponse } from 'axios'
|
||||
import type { AppMemberUserInfoRespVO } from '@/api/common/types'
|
||||
export type onRefreshTokenResponse = (data: AxiosResponse | boolean) => { token: string; refreshToken: string } | false
|
||||
import type { AppMemberUserInfoRespVO } from "@/api/common/types";
|
||||
export type onRefreshTokenResponse = (
|
||||
data: AxiosResponse | boolean
|
||||
) => { token: string; refreshToken: string } | false;
|
||||
|
||||
export type TRefreshTokenConstructorConfig = {
|
||||
refreshTokenApiUrl: string
|
||||
refreshTokenKey?: string
|
||||
tokenKey?: string
|
||||
axiosInstance: AxiosInstance
|
||||
onRefreshTokenResponse: onRefreshTokenResponse
|
||||
onRefreshTokenResquest?: () => {
|
||||
config?: AxiosRequestConfig
|
||||
data?: any
|
||||
}
|
||||
}
|
||||
export default class RefreshToken {
|
||||
static instance: RefreshToken
|
||||
static SOTRAGE_REFRESH_TOKEN_KEY = 'kl-tk'
|
||||
static SOTRAGE_TOKENKEY = 'kl-rfk'
|
||||
static SOTRAGE_USERID = 'kl-userId'
|
||||
static SOTRAGE_USERNAME = 'kl-userName'
|
||||
static SOTRAGE_USERINFO = 'kl-userInfo'
|
||||
private REFRESH_TOKEN_API_URL: string
|
||||
public pending = false
|
||||
private axios: AxiosInstance
|
||||
public callbacks: any[] = []
|
||||
private onRefreshTokenResponse: onRefreshTokenResponse
|
||||
private onRefreshTokenResquest?: () => {
|
||||
config?: AxiosRequestConfig
|
||||
data?: any
|
||||
}
|
||||
class RefreshToken {
|
||||
static instance: RefreshToken;
|
||||
static SOTRAGE_REFRESH_TOKEN_KEY = "kl-tk";
|
||||
static SOTRAGE_TOKENKEY = "kl-rfk";
|
||||
static SOTRAGE_USERID = "kl-userId";
|
||||
static SOTRAGE_USERNAME = "kl-userName";
|
||||
static SOTRAGE_USERINFO = "kl-userInfo";
|
||||
public pending = false;
|
||||
public callbacks: any[] = [];
|
||||
|
||||
protected constructor(config: TRefreshTokenConstructorConfig) {
|
||||
RefreshToken.SOTRAGE_REFRESH_TOKEN_KEY = config?.refreshTokenKey || 'kl-tk'
|
||||
RefreshToken.SOTRAGE_TOKENKEY = config?.refreshTokenKey || 'kl-rfk'
|
||||
RefreshToken.SOTRAGE_USERID = config?.refreshTokenKey || 'kl-userId'
|
||||
this.REFRESH_TOKEN_API_URL = config?.refreshTokenApiUrl || ''
|
||||
this.axios = config.axiosInstance
|
||||
this.onRefreshTokenResponse = config.onRefreshTokenResponse
|
||||
this.onRefreshTokenResquest = config.onRefreshTokenResquest
|
||||
}
|
||||
|
||||
static create(config: TRefreshTokenConstructorConfig) {
|
||||
if (!RefreshToken.instance) {
|
||||
RefreshToken.instance = new RefreshToken(config)
|
||||
}
|
||||
return RefreshToken.instance
|
||||
RefreshToken.SOTRAGE_REFRESH_TOKEN_KEY = config?.refreshTokenKey || "kl-tk";
|
||||
RefreshToken.SOTRAGE_TOKENKEY = config?.refreshTokenKey || "kl-rfk";
|
||||
RefreshToken.SOTRAGE_USERID = config?.refreshTokenKey || "kl-userId";
|
||||
}
|
||||
|
||||
// 设置token
|
||||
setToken(token: string, refreshToken: string) {
|
||||
window.localStorage.setItem(RefreshToken.SOTRAGE_TOKENKEY, token)
|
||||
window.localStorage.setItem(RefreshToken.SOTRAGE_REFRESH_TOKEN_KEY, refreshToken)
|
||||
static setToken(token: string, refreshToken: string) {
|
||||
window.localStorage.setItem(RefreshToken.SOTRAGE_TOKENKEY, token);
|
||||
window.localStorage.setItem(
|
||||
RefreshToken.SOTRAGE_REFRESH_TOKEN_KEY,
|
||||
refreshToken
|
||||
);
|
||||
}
|
||||
|
||||
// 清除token
|
||||
removeToken() {
|
||||
window.localStorage.removeItem(RefreshToken.SOTRAGE_TOKENKEY)
|
||||
window.localStorage.removeItem(RefreshToken.SOTRAGE_REFRESH_TOKEN_KEY)
|
||||
static removeToken() {
|
||||
window.localStorage.removeItem(RefreshToken.SOTRAGE_TOKENKEY);
|
||||
window.localStorage.removeItem(RefreshToken.SOTRAGE_REFRESH_TOKEN_KEY);
|
||||
//清除token,一起把userID也清除了
|
||||
window.localStorage.removeItem(RefreshToken.SOTRAGE_USERID)
|
||||
window.localStorage.removeItem(RefreshToken.SOTRAGE_USERNAME)
|
||||
window.localStorage.removeItem(RefreshToken.SOTRAGE_USERINFO)
|
||||
window.localStorage.removeItem(RefreshToken.SOTRAGE_USERID);
|
||||
window.localStorage.removeItem(RefreshToken.SOTRAGE_USERNAME);
|
||||
window.localStorage.removeItem(RefreshToken.SOTRAGE_USERINFO);
|
||||
}
|
||||
//设置userID
|
||||
setUserId(userId: string) {
|
||||
window.localStorage.setItem(RefreshToken.SOTRAGE_USERID, userId)
|
||||
static setUserId(userId: string) {
|
||||
window.localStorage.setItem(RefreshToken.SOTRAGE_USERID, userId);
|
||||
}
|
||||
setUserName(userName: string) {
|
||||
window.localStorage.setItem(RefreshToken.SOTRAGE_USERNAME, userName)
|
||||
static setUserName(userName: string) {
|
||||
window.localStorage.setItem(RefreshToken.SOTRAGE_USERNAME, userName);
|
||||
}
|
||||
setUserInfo(userInfo: AppMemberUserInfoRespVO) {
|
||||
window.localStorage.setItem(RefreshToken.SOTRAGE_USERINFO, JSON.stringify(userInfo))
|
||||
static setUserInfo(userInfo: AppMemberUserInfoRespVO) {
|
||||
window.localStorage.setItem(
|
||||
RefreshToken.SOTRAGE_USERINFO,
|
||||
JSON.stringify(userInfo)
|
||||
);
|
||||
}
|
||||
// 获取token
|
||||
getToken() {
|
||||
const token = window.localStorage.getItem(RefreshToken.SOTRAGE_TOKENKEY) || ''
|
||||
const refreshToken = window.localStorage.getItem(RefreshToken.SOTRAGE_REFRESH_TOKEN_KEY) || ''
|
||||
const userId = window.localStorage.getItem(RefreshToken.SOTRAGE_USERID) || ''
|
||||
const userName = window.localStorage.getItem(RefreshToken.SOTRAGE_USERNAME) || ''
|
||||
const userInfo = window.localStorage.getItem(RefreshToken.SOTRAGE_USERINFO) || ''
|
||||
static getToken() {
|
||||
const token =
|
||||
window.localStorage.getItem(RefreshToken.SOTRAGE_TOKENKEY) || "";
|
||||
const refreshToken =
|
||||
window.localStorage.getItem(RefreshToken.SOTRAGE_REFRESH_TOKEN_KEY) || "";
|
||||
const userId =
|
||||
window.localStorage.getItem(RefreshToken.SOTRAGE_USERID) || "";
|
||||
const userName =
|
||||
window.localStorage.getItem(RefreshToken.SOTRAGE_USERNAME) || "";
|
||||
const userInfo =
|
||||
window.localStorage.getItem(RefreshToken.SOTRAGE_USERINFO) || "";
|
||||
return {
|
||||
token,
|
||||
refreshToken,
|
||||
userId,
|
||||
userName,
|
||||
userInfo: userInfo ? JSON.parse(userInfo) : {},
|
||||
}
|
||||
}
|
||||
// 刷新token
|
||||
refresh() {
|
||||
return new Promise<{ token: string; refreshToken: string } | boolean>((resolve) => {
|
||||
this.pending = true
|
||||
const config = (this.onRefreshTokenResquest && this.onRefreshTokenResquest()) || {}
|
||||
axios
|
||||
.post(this.REFRESH_TOKEN_API_URL, config.data || {}, config.config)
|
||||
.then((res) => {
|
||||
const ac = this.onRefreshTokenResponse(res)
|
||||
if (ac) {
|
||||
// 设置新的token
|
||||
this.setToken(ac.token, ac.refreshToken)
|
||||
resolve(ac)
|
||||
return
|
||||
}
|
||||
resolve(false)
|
||||
})
|
||||
.catch((e) => {
|
||||
console.log(e)
|
||||
this.onRefreshTokenResponse(false)
|
||||
resolve(false)
|
||||
})
|
||||
.finally(() => {
|
||||
this.pending = false
|
||||
})
|
||||
})
|
||||
}
|
||||
// 推入刷新token成功 回调队列
|
||||
pushCallbacks(config: AxiosRequestConfig) {
|
||||
return new Promise((resolve) => {
|
||||
this.callbacks.push(() => {
|
||||
resolve(this.axios(config))
|
||||
})
|
||||
})
|
||||
}
|
||||
// 推出队列回调
|
||||
releaseQueue() {
|
||||
// const tokens = this.getToken()
|
||||
this.callbacks.forEach((item) => {
|
||||
item()
|
||||
})
|
||||
this.callbacks = []
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
export default RefreshToken;
|
||||
|
||||
@ -96,3 +96,13 @@ export const downloadFile = (url: string, filename: string) => {
|
||||
a.click()
|
||||
document.body.removeChild(a)
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 判断传入的参数是否为数组
|
||||
* @param arr - 需要判断的参数
|
||||
* @returns {boolean} 如果参数是数组则返回true,否则返回false
|
||||
*/
|
||||
export const isArray = (arr: any) => { // 定义一个名为isArray的导出函数,接收任意类型的参数arr
|
||||
return Array.isArray(arr)
|
||||
}
|
||||
Reference in New Issue
Block a user