fix: sync verification state with auth guards

This commit is contained in:
zetaloop
2026-02-21 15:53:46 +08:00
parent 6469811382
commit 6ed8620ca6
5 changed files with 70 additions and 7 deletions
+25 -1
View File
@@ -1,12 +1,14 @@
import { create } from "zustand"
import type { User, UserRole } from "@/lib/types"
import type { User, UserRole, VerificationStatus } from "@/lib/types"
interface AuthState {
isAuthenticated: boolean
currentRole: UserRole
verifiedRoles: UserRole[]
verificationStatus: Partial<Record<UserRole, VerificationStatus>>
user: User | null
switchRole: (role: UserRole) => void
submitVerification: (role: UserRole) => void
login: (user: User, verifiedRoles?: UserRole[]) => void
logout: () => void
}
@@ -15,6 +17,7 @@ export const useAuthStore = create<AuthState>((set, get) => ({
isAuthenticated: false,
currentRole: "consumer",
verifiedRoles: ["consumer"],
verificationStatus: { consumer: "approved" },
user: null,
switchRole: (role) => {
const { verifiedRoles } = get()
@@ -22,18 +25,39 @@ export const useAuthStore = create<AuthState>((set, get) => ({
set({ currentRole: role })
}
},
submitVerification: (role) =>
set((state) => {
if (state.verifiedRoles.includes(role)) {
return state
}
return {
verificationStatus: {
...state.verificationStatus,
[role]: "pending",
},
}
}),
login: (user, verifiedRoles = ["consumer"]) =>
set({
isAuthenticated: true,
user,
currentRole: user.role,
verifiedRoles,
verificationStatus: verifiedRoles.reduce<Partial<Record<UserRole, VerificationStatus>>>(
(acc, role) => {
acc[role] = "approved"
return acc
},
{},
),
}),
logout: () =>
set({
isAuthenticated: false,
currentRole: "consumer",
verifiedRoles: ["consumer"],
verificationStatus: { consumer: "approved" },
user: null,
}),
}))