feat: 🚀 刷新token

This commit is contained in:
Bunny 2024-09-26 23:09:43 +08:00
parent 86ec14cae5
commit 50af6bbec9
5 changed files with 50 additions and 49 deletions

View File

@ -29,7 +29,9 @@ export interface RefreshTokenResult {
expires: Date;
}
/** 登录 */
/**
*
*/
export const fetchLogin = (data?: object) => {
return http.request<BaseResult<UserResult>>('post', '/login', { data });
};
@ -44,5 +46,5 @@ export const fetchPostEmailCode = (data: any) => {
/** 刷新`token` */
export const refreshTokenApi = (data?: object) => {
return http.request<BaseResult<RefreshTokenResult>>('post', '/refresh-token', { data });
return http.request<BaseResult<RefreshTokenResult>>('post', 'user/noAuth/refreshToken', { data });
};

View File

@ -1,6 +1,6 @@
import { defineStore } from 'pinia';
import { resetRouter, router, routerArrays, storageLocal, store, type userType } from '../utils';
import { fetchLogin, fetchPostEmailCode, refreshTokenApi, type RefreshTokenResult } from '@/api/v1/user';
import { fetchLogin, fetchPostEmailCode, refreshTokenApi } from '@/api/v1/user';
import { useMultiTagsStoreHook } from './multiTags';
import { type DataInfo, removeToken, setToken, userKey } from '@/utils/auth';
import { message } from '@/utils/message';
@ -19,13 +19,14 @@ export const useUserStore = defineStore({
// 按钮级别权限
permissions: storageLocal().getItem<DataInfo<number>>(userKey)?.permissions ?? [],
// 是否勾选了登录页的免登录
isRemembered: false,
isRemembered: true,
// 登录页的免登录存储几天默认7天
loginDay: 7,
readMeDay: 7,
}),
actions: {
/** 登入 */
async loginByUsername(data: any) {
data = this.isRemembered ? { ...data, readMeDay: this.readMeDay } : data;
const result = await fetchLogin(data);
if (result.code === 200) {
@ -68,19 +69,14 @@ export const useUserStore = defineStore({
/**
* `token`
*/
async handRefreshToken(data) {
return new Promise<RefreshTokenResult>((resolve, reject) => {
refreshTokenApi(data)
.then((data: any) => {
if (data) {
setToken(data.data);
resolve(data);
}
})
.catch(error => {
reject(error);
});
});
async handRefreshToken(data: any) {
const result = await refreshTokenApi({ ...data, readMeDay: this.readMeDay });
if (result.code === 200) {
setToken(data.data);
return true;
}
message(result.message, { type: 'error' });
return false;
},
},
});

View File

@ -1,47 +1,47 @@
import type { RouteRecordName } from "vue-router";
import type { RouteRecordName } from 'vue-router';
export type cacheType = {
mode: string;
name?: RouteRecordName;
mode: string;
name?: RouteRecordName;
};
export type positionType = {
startIndex?: number;
length?: number;
startIndex?: number;
length?: number;
};
export type appType = {
sidebar: {
opened: boolean;
withoutAnimation: boolean;
// 判断是否手动点击Collapse
isClickCollapse: boolean;
};
layout: string;
device: string;
viewportSize: { width: number; height: number };
sidebar: {
opened: boolean;
withoutAnimation: boolean;
// 判断是否手动点击Collapse
isClickCollapse: boolean;
};
layout: string;
device: string;
viewportSize: { width: number; height: number };
};
export type multiType = {
path: string;
name: string;
meta: any;
query?: object;
params?: object;
path: string;
name: string;
meta: any;
query?: object;
params?: object;
};
export type setType = {
title: string;
fixedHeader: boolean;
hiddenSideBar: boolean;
title: string;
fixedHeader: boolean;
hiddenSideBar: boolean;
};
export type userType = {
avatar?: string;
username?: string;
nickname?: string;
roles?: Array<string>;
permissions?: Array<string>;
isRemembered?: boolean;
loginDay?: number;
avatar?: string;
username?: string;
nickname?: string;
roles?: Array<string>;
permissions?: Array<string>;
isRemembered?: boolean;
readMeDay?: number;
};

View File

@ -47,13 +47,13 @@ export function setToken(data: any) {
const userStore = useUserStore();
let expires = 0;
const { token, refreshToken } = data;
const { isRemembered, loginDay } = useUserStoreHook();
const { isRemembered, readMeDay } = useUserStoreHook();
expires = new Date(data.expires).getTime(); // 如果后端直接设置时间戳将此处代码改为expires = data.expires然后把上面的DataInfo<Date>改成DataInfo<number>即可
const cookieString = JSON.stringify({ token, expires, refreshToken });
expires > 0 ? Cookies.set(TokenKey, cookieString, { expires: (expires - Date.now()) / 86400000 }) : Cookies.set(TokenKey, cookieString);
Cookies.set(multipleTabsKey, 'true', isRemembered ? { expires: loginDay } : {});
Cookies.set(multipleTabsKey, 'true', isRemembered ? { expires: readMeDay } : {});
function setUserKey({ avatar, username, nickname, roles, permissions }) {
userStore.avatar = avatar;

View File

@ -128,6 +128,9 @@ onBeforeUnmount(() => {
</el-link>
</template>
</el-input>
<el-checkbox v-model="userStore.isRemembered">
<el-text size="small" type="primary">{{ userStore.readMeDay }}天免登录</el-text>
</el-checkbox>
</el-form-item>
</Motion>