duplicate login blocking

This commit is contained in:
landaiqing
2024-09-03 23:16:51 +08:00
parent b4b733a3d2
commit 9b3a6d37de
6 changed files with 216 additions and 221 deletions

View File

@@ -41,6 +41,7 @@ export default {
twoPasswordNotSame: "two passwords are not the same, please try again",
resetPasswordSuccess: "reset password success",
resetPasswordError: "reset password failed",
pleaseLogin: "please login",
},
landing: {
@@ -76,6 +77,7 @@ export default {
authTokenExpired: "auth token expired, please login again",
loginExpired: "login expired, please try again",
pleaseLogin: "please login first",
loginExpiredDesc: "this account has been logged in elsewhere, please login again",
}
};

View File

@@ -41,6 +41,7 @@ export default {
twoPasswordNotSame: "两次密码输入不一致!",
resetPasswordSuccess: "密码重置成功!",
resetPasswordError: "密码重置失败!",
pleaseLogin: "请先登录!",
},
landing: {
@@ -74,7 +75,8 @@ export default {
other: '连接出错',
authTokenError: "认证失败,请重新登录!",
authTokenExpired: "认证过期,请重新登录!",
loginExpired: "登录已过期!,请重新登录!",
loginExpired: "登录已过期!",
pleaseLogin: "请先登录!",
loginExpiredDesc: "该账号在其他地方登录,请重新登录!"
}
};

View File

@@ -7,6 +7,7 @@ import {close, start} from '@/components/Nprogress/nprogress.ts';
import notFound from "./modules/notFound.ts";
import landing from "./modules/landing.ts";
import mainRouter from "./modules/main_router.ts";
import i18n from "@/locales";
const routes: Array<RouteRecordRaw> = [
...login,
@@ -26,14 +27,25 @@ const router: Router = createRouter({
router.beforeEach((to, _from, next) => {
start();
if (to.meta.requiresAuth) {
const user = useStore().user;
const token: string | undefined = user.user.refreshToken;
const userId: string | undefined = user.user.userId;
if (token !== "" && userId !== "") {
const user = useStore().user;
const token: string | undefined = user.user.refreshToken;
const userId: string | undefined = user.user.userId;
// 检查用户是否已登录
const isLoggedIn: boolean = token !== "" && userId !== "";
if (to.path === '/login' || to.path === '/qrlogin' || to.path === '/resetpass') {
if (isLoggedIn) {
// 如果用户已登录,重定向到主页或其他页面
next({path: '/main'});
} else {
next();
}
} else if (to.meta.requiresAuth) {
if (isLoggedIn) {
next();
} else {
message.warn('请先登录').then();
message.warn(i18n.global.t('login.pleaseLogin')).then();
next({
path: '/login',
query: {redirect: to.fullPath}
@@ -44,6 +56,7 @@ router.beforeEach((to, _from, next) => {
}
});
router.afterEach(() => {
// 关闭进度条
close();

View File

@@ -6,7 +6,7 @@ import {localforageStorageAdapter} from "@/utils/alova/adapter/localforageStorag
import {createServerTokenAuthentication} from "alova/client";
import {AxiosError, AxiosResponse} from "axios";
import {handleCode} from "@/utils/errorCode/errorCodeHandler.ts";
import {message} from "ant-design-vue";
import {message, notification} from "ant-design-vue";
import i18n from "@/locales";
import {axiosRequestAdapter} from "@alova/adapter-axios";
import {refreshToken} from "@/api/user";
@@ -26,7 +26,7 @@ const {onAuthRequired, onResponseRefreshToken} = createServerTokenAuthentication
try {
// 刷新token
const user = useStore().user;
const res: any = await refreshToken(user.user?.refreshToken || '');
const res: any = await refreshToken(user.user?.refreshToken);
if (res.code === 0 && res.data) {
const {access_token, refresh_token, uid} = res.data;
user.user.accessToken = access_token;
@@ -75,7 +75,19 @@ export const service = createAlova({
if (response.data instanceof Blob) {
return response;
} else {
return response.data;
if (response.data.code === 403) {
notification.error({
placement: 'topRight',
message: i18n.global.t('error.loginExpired'),
description: i18n.global.t('error.loginExpiredDesc'),
onClose: () => {
localStorage.removeItem('user');
router.push('/login');
}
});
} else {
return response.data;
}
}
},
onError: