feat(认证): 延长本地密钥存活时间并添加访问标签持久化
修改认证密钥的本地存储时间为72小时以符合文档要求 在AnalyticsVisitView中添加访问标签的本地存储功能,持久化用户选择的标签
This commit is contained in:
@@ -135,6 +135,7 @@ const overview = ref<VisitOverviewResponse>({
|
||||
});
|
||||
const items = ref<VisitPageItem[]>([]);
|
||||
const visitTab = ref<"pv" | "latest">("pv");
|
||||
const visitTabStorageKey = "cwd-analytics-visit-tab";
|
||||
|
||||
const injectedDomainFilter = inject<Ref<string> | null>("domainFilter", null);
|
||||
const domainFilter = injectedDomainFilter ?? ref("");
|
||||
@@ -212,6 +213,29 @@ function getVisitOrderParam(): "pv" | "latest" | undefined {
|
||||
return undefined;
|
||||
}
|
||||
|
||||
function loadVisitTabFromStorage() {
|
||||
if (typeof window === "undefined") {
|
||||
return;
|
||||
}
|
||||
try {
|
||||
const value = window.localStorage.getItem(visitTabStorageKey);
|
||||
if (value === "pv" || value === "latest") {
|
||||
visitTab.value = value;
|
||||
}
|
||||
} catch {
|
||||
}
|
||||
}
|
||||
|
||||
function saveVisitTabToStorage(value: "pv" | "latest") {
|
||||
if (typeof window === "undefined") {
|
||||
return;
|
||||
}
|
||||
try {
|
||||
window.localStorage.setItem(visitTabStorageKey, value);
|
||||
} catch {
|
||||
}
|
||||
}
|
||||
|
||||
async function loadData() {
|
||||
loading.value = true;
|
||||
listLoading.value = true;
|
||||
@@ -273,6 +297,7 @@ function changeVisitTab(tab: "pv" | "latest") {
|
||||
return;
|
||||
}
|
||||
visitTab.value = tab;
|
||||
saveVisitTabToStorage(tab);
|
||||
loadVisitPagesOnly();
|
||||
}
|
||||
|
||||
@@ -338,6 +363,7 @@ function handleResize() {
|
||||
}
|
||||
|
||||
onMounted(() => {
|
||||
loadVisitTabFromStorage();
|
||||
loadData();
|
||||
window.addEventListener("resize", handleResize);
|
||||
});
|
||||
|
||||
@@ -381,6 +381,7 @@ POST /api/verify-admin
|
||||
|
||||
**风控说明**
|
||||
|
||||
- 本地密钥存活时间 72 小时
|
||||
- 同一 IP 连续验证失败 3 次后,该 IP 将被锁定 30 分钟
|
||||
- 失败次数记录有效期为 1 小时
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
const STORAGE_KEY = 'cwd_admin_auth';
|
||||
const EXPIRY_MS = 12 * 60 * 60 * 1000; // 12 hours
|
||||
const EXPIRY_MS = 72 * 60 * 60 * 1000; // 72 hours
|
||||
|
||||
// Simple obfuscation (not real encryption, but sufficient for local storage requirement if no sensitive data other than the key itself which is already shared)
|
||||
// Requirement says "Local storage key credential needs to be encrypted".
|
||||
|
||||
Reference in New Issue
Block a user