|
@@ -10,15 +10,17 @@ export const userKey = 'user-info';
|
|
|
export const tokenKey = 'authorized-token';
|
|
export const tokenKey = 'authorized-token';
|
|
|
|
|
|
|
|
/** 获取`token` */
|
|
/** 获取`token` */
|
|
|
-export function getToken(): API.UserInfo | null {
|
|
|
|
|
- return Cookies.get(tokenKey) ? JSON.parse(Cookies.get(tokenKey)!) : ls.getLocal(userKey);
|
|
|
|
|
|
|
+export function getToken(): API.UserInfo {
|
|
|
|
|
+ return Cookies.get(tokenKey)
|
|
|
|
|
+ ? JSON.parse(Cookies.get(tokenKey)!)
|
|
|
|
|
+ : (ls.getLocal(userKey) as API.UserInfo);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
/**
|
|
|
- * @description 设置`token`以及一些必要信息并采用无感刷新`token`方案
|
|
|
|
|
- * 无感刷新:后端返回`accessToken`(访问接口使用的`token`)、`refreshToken`(用于调用刷新`accessToken`的接口时所需的`token`,`refreshToken`的过期时间(比如30天)应大于`accessToken`的过期时间(比如2小时))、`expires`(`accessToken`的过期时间)
|
|
|
|
|
- * 将`accessToken`、`expires`、`refreshToken`这三条信息放在key值为authorized-token的cookie里(过期自动销毁)
|
|
|
|
|
- * 将`username`、`nickname`、`avatar`、`roles`、`permissions`、`refreshToken`、`expires`这七条信息放在key值为`user-info`的localStorage里
|
|
|
|
|
|
|
+ * @description 设置 token 以及一些必要信息并采用无感刷新 token 方案
|
|
|
|
|
+ * 无感刷新:后端返回 accessToken(访问接口使用的 token)、refreshToken(用于调用刷新 accessToken 的接口时所需的 token,refreshToken 的过期时间(比如30天)应大于 accessToken 的过期时间(比如2小时))、expires(accessToken 的过期时间)
|
|
|
|
|
+ * 将 accessToken、expires、refreshToken 这三条信息放在 key 值为 authorized-token 的 cookie 里(过期自动销毁)
|
|
|
|
|
+ * 将除了 accessToken 之外的其他信息放在 key 值为 user-info 的 localStorage 里
|
|
|
*/
|
|
*/
|
|
|
export function setToken(data: API.UserInfo) {
|
|
export function setToken(data: API.UserInfo) {
|
|
|
const { accessToken = '', expires = 0, refreshToken = '' } = data;
|
|
const { accessToken = '', expires = 0, refreshToken = '' } = data;
|
|
@@ -32,35 +34,55 @@ export function setToken(data: API.UserInfo) {
|
|
|
Cookies.set(tokenKey, cookieString);
|
|
Cookies.set(tokenKey, cookieString);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- function setUserKey({ avatar, username, nickname, roles, permissions }: API.UserInfo) {
|
|
|
|
|
|
|
+ function setUserKey({
|
|
|
|
|
+ userId,
|
|
|
|
|
+ deviceId,
|
|
|
|
|
+ username,
|
|
|
|
|
+ nickname,
|
|
|
|
|
+ avatar,
|
|
|
|
|
+ email,
|
|
|
|
|
+ phone,
|
|
|
|
|
+ refer,
|
|
|
|
|
+ }: API.UserInfo) {
|
|
|
ls.setLocal(userKey, {
|
|
ls.setLocal(userKey, {
|
|
|
|
|
+ refreshToken,
|
|
|
|
|
+ expires,
|
|
|
|
|
+ userId,
|
|
|
|
|
+ deviceId,
|
|
|
username,
|
|
username,
|
|
|
nickname,
|
|
nickname,
|
|
|
avatar,
|
|
avatar,
|
|
|
- roles,
|
|
|
|
|
- permissions,
|
|
|
|
|
- refreshToken,
|
|
|
|
|
- expires,
|
|
|
|
|
|
|
+ email,
|
|
|
|
|
+ phone,
|
|
|
|
|
+ refer,
|
|
|
});
|
|
});
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- if (data.username && data.roles) {
|
|
|
|
|
- const { username, roles } = data;
|
|
|
|
|
|
|
+ if (data.userId || data.deviceId) {
|
|
|
|
|
+ // 登录时,后端接口会返回用户信息,直接设置到 localStorage 中
|
|
|
setUserKey({
|
|
setUserKey({
|
|
|
- username,
|
|
|
|
|
- nickname: data?.nickname ?? '',
|
|
|
|
|
- avatar: data?.avatar ?? '',
|
|
|
|
|
- roles,
|
|
|
|
|
- permissions: data?.permissions ?? [],
|
|
|
|
|
|
|
+ userId: data.userId || '',
|
|
|
|
|
+ deviceId: data.deviceId || '',
|
|
|
|
|
+ username: data.username || '',
|
|
|
|
|
+ nickname: data.nickname || '',
|
|
|
|
|
+ avatar: data.avatar || '',
|
|
|
|
|
+ email: data.email || '',
|
|
|
|
|
+ phone: data.phone || '',
|
|
|
|
|
+ refer: data.refer || '',
|
|
|
});
|
|
});
|
|
|
} else {
|
|
} else {
|
|
|
|
|
+ // 刷新 token 时,后端接口不会返回用户信息,需要从 localStorage 中获取用户信息
|
|
|
const d = ls.getLocal<API.UserInfo>(userKey);
|
|
const d = ls.getLocal<API.UserInfo>(userKey);
|
|
|
- const username = d?.username ?? '';
|
|
|
|
|
- const nickname = d?.nickname ?? '';
|
|
|
|
|
- const avatar = d?.avatar ?? '';
|
|
|
|
|
- const roles = d?.roles ?? [];
|
|
|
|
|
- const permissions = d?.permissions ?? [];
|
|
|
|
|
- setUserKey({ username, nickname, avatar, roles, permissions });
|
|
|
|
|
|
|
+ setUserKey({
|
|
|
|
|
+ userId: d?.userId || '',
|
|
|
|
|
+ deviceId: d?.deviceId || '',
|
|
|
|
|
+ username: d?.username || '',
|
|
|
|
|
+ nickname: d?.nickname || '',
|
|
|
|
|
+ avatar: d?.avatar || '',
|
|
|
|
|
+ email: d?.email || '',
|
|
|
|
|
+ phone: d?.phone || '',
|
|
|
|
|
+ refer: d?.refer || '',
|
|
|
|
|
+ });
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|