|
|
@@ -7,6 +7,7 @@ import './style.css';
|
|
|
|
|
|
const TOKEN_KEY = 'julefood_token';
|
|
|
const USER_INFO_KEY = 'julefood_user_info';
|
|
|
+const EXPIRATION_TIME_KEY = 'julefood_expiration_time';
|
|
|
|
|
|
function saveToken(token: string): void {
|
|
|
localStorage.setItem(TOKEN_KEY, token);
|
|
|
@@ -25,9 +26,24 @@ function getUserInfo(): UserInfo | null {
|
|
|
return str ? JSON.parse(str) : null;
|
|
|
}
|
|
|
|
|
|
+function saveExpirationTime(expirationTime: string): void {
|
|
|
+ localStorage.setItem(EXPIRATION_TIME_KEY, expirationTime);
|
|
|
+}
|
|
|
+
|
|
|
+function isTokenExpired(): boolean {
|
|
|
+ const expirationTime = localStorage.getItem(EXPIRATION_TIME_KEY);
|
|
|
+ if (!expirationTime) {
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ const expireDate = new Date(expirationTime).getTime();
|
|
|
+ const now = new Date().getTime();
|
|
|
+ return now > expireDate;
|
|
|
+}
|
|
|
+
|
|
|
function clearAuth(): void {
|
|
|
localStorage.removeItem(TOKEN_KEY);
|
|
|
localStorage.removeItem(USER_INFO_KEY);
|
|
|
+ localStorage.removeItem(EXPIRATION_TIME_KEY);
|
|
|
}
|
|
|
|
|
|
interface ApiParam {
|
|
|
@@ -134,6 +150,7 @@ function App() {
|
|
|
setUserInfo(result.userInfo);
|
|
|
saveUserInfo(result.userInfo);
|
|
|
saveToken(result.token);
|
|
|
+ saveExpirationTime(result.expirationTime);
|
|
|
await handleConfigPermission(result.token);
|
|
|
} catch (error: any) {
|
|
|
console.error('自动登录失败:', error);
|
|
|
@@ -227,12 +244,18 @@ function App() {
|
|
|
try {
|
|
|
const savedToken = getToken();
|
|
|
const savedUserInfo = getUserInfo();
|
|
|
+ const tokenExpired = isTokenExpired();
|
|
|
|
|
|
- if (savedToken && savedUserInfo) {
|
|
|
+ if (savedToken && savedUserInfo && !tokenExpired) {
|
|
|
+ console.log('Token 有效,使用缓存登录');
|
|
|
setUserInfo(savedUserInfo);
|
|
|
await loadApiList();
|
|
|
loadDocumentInfo();
|
|
|
} else {
|
|
|
+ console.log('Token 无效或已过期,重新登录');
|
|
|
+ if (tokenExpired) {
|
|
|
+ clearAuth();
|
|
|
+ }
|
|
|
await handleAutoLogin();
|
|
|
await loadApiList();
|
|
|
loadDocumentInfo();
|