fix(data): 清理旧数据并保护服务端写入
This commit is contained in:
@@ -3,14 +3,15 @@
|
||||
import { create } from 'zustand';
|
||||
import { loadServerData } from '@/lib/server-data';
|
||||
import type { Member } from '@/lib/members';
|
||||
import { ensureMemberUsernames } from '@/lib/members';
|
||||
import { SYSTEM_ADMIN_MEMBER, ensureSystemAdminMember } from '@/lib/member-system';
|
||||
import { resolveAuthUserFromMembers, toAuthUser, type AuthUser } from '@/lib/auth-user';
|
||||
import { findMemberByUsernameCredentials, resolveAuthUserFromMembers, toAuthUser, type AuthUser } from '@/lib/auth-user';
|
||||
import { useMemberStore } from './useMemberStore';
|
||||
|
||||
interface AuthState {
|
||||
user: AuthUser | null;
|
||||
isAuthenticated: boolean;
|
||||
login: (phone: string, password: string, remember: boolean) => Promise<boolean>;
|
||||
login: (username: string, password: string, remember: boolean) => Promise<boolean>;
|
||||
logout: () => void;
|
||||
checkAuth: () => void;
|
||||
refreshUser: () => Promise<void>;
|
||||
@@ -40,11 +41,15 @@ function clearAuthStorage() {
|
||||
async function loadMembersForAuth(): Promise<Member[]> {
|
||||
try {
|
||||
const stored = await loadServerData<StoredMembersData>('members');
|
||||
if (stored?.members?.length) return ensureSystemAdminMember(stored.members).members;
|
||||
if (stored?.members?.length) {
|
||||
const ensured = ensureSystemAdminMember(stored.members);
|
||||
return ensureMemberUsernames(ensured.members).members;
|
||||
}
|
||||
} catch {}
|
||||
|
||||
const inMemoryMembers = useMemberStore.getState().members;
|
||||
return inMemoryMembers.length > 0 ? ensureSystemAdminMember(inMemoryMembers).members : FALLBACK_MEMBERS;
|
||||
const members = inMemoryMembers.length > 0 ? ensureSystemAdminMember(inMemoryMembers).members : FALLBACK_MEMBERS;
|
||||
return ensureMemberUsernames(members).members;
|
||||
}
|
||||
|
||||
async function refreshStoredAuthUser(user: AuthUser, remember: boolean, set: (state: Partial<AuthState>) => void) {
|
||||
@@ -65,9 +70,9 @@ export const useAuthStore = create<AuthState>((set) => ({
|
||||
user: null,
|
||||
isAuthenticated: false,
|
||||
|
||||
login: async (phone, password, remember) => {
|
||||
login: async (username, password, remember) => {
|
||||
const members = await loadMembersForAuth();
|
||||
const member = members.find((m) => m.phone === phone && (m.password || 'Ftb@2024') === password);
|
||||
const member = findMemberByUsernameCredentials(username, password, members);
|
||||
if (!member) return false;
|
||||
|
||||
const user = toAuthUser(member);
|
||||
|
||||
Reference in New Issue
Block a user