diff --git a/app/(auth)/login/page.tsx b/app/(auth)/login/page.tsx index a9518f1..57dcba0 100644 --- a/app/(auth)/login/page.tsx +++ b/app/(auth)/login/page.tsx @@ -36,7 +36,7 @@ export default function LoginPage() { const onSubmit = async (data: z.infer) => { try { const user = await loginApi({ username: data.username, password: data.password }) - storeLogin(user, ["consumer", "player", "owner"]) + storeLogin(user, user.verifiedRoles) router.push("/") } catch (err) { notifyInfo(toApiError(err).msg) diff --git a/app/(auth)/register/page.tsx b/app/(auth)/register/page.tsx index fda158b..27d8cc3 100644 --- a/app/(auth)/register/page.tsx +++ b/app/(auth)/register/page.tsx @@ -84,7 +84,7 @@ export default function RegisterPage() { vcode: data.vcode, requestId, }) - storeLogin(user, ["consumer"]) + storeLogin(user, user.verifiedRoles ?? ["consumer"]) router.push("/") } catch (err) { notifyInfo(toApiError(err).msg) diff --git a/components/login-dialog.tsx b/components/login-dialog.tsx index e02cd70..758a7d6 100644 --- a/components/login-dialog.tsx +++ b/components/login-dialog.tsx @@ -45,7 +45,7 @@ export function LoginDialog({ open, onOpenChange }: LoginDialogProps) { const onSubmit = async (data: z.infer) => { try { const user = await loginApi({ username: data.username, password: data.password }) - storeLogin(user, ["consumer", "player", "owner"]) + storeLogin(user, user.verifiedRoles) consumePendingAction() onOpenChange(false) } catch (err) { diff --git a/store/auth.ts b/store/auth.ts index d1dd5b9..beba521 100644 --- a/store/auth.ts +++ b/store/auth.ts @@ -125,23 +125,27 @@ export const useAuthStore = create((set, get) => ({ }, } }), - login: (user, verifiedRoles = ["consumer"], themePreference) => - set((state) => ({ - isAuthenticated: true, - user, - currentRole: user.role, - verifiedRoles, - verificationStatus: verifiedRoles.reduce>>( - (acc, role) => { + login: (user, verifiedRoles, themePreference) => + set((state) => { + const nextVerifiedRoles = verifiedRoles ?? user.verifiedRoles ?? [user.role] + const nextVerificationStatus = + user.verificationStatus ?? + nextVerifiedRoles.reduce>>((acc, role) => { acc[role] = "approved" return acc - }, - {}, - ), - verificationReasons: {}, - notificationPrefs: state.notificationPrefs, - themePreference: themePreference ?? state.themePreference, - })), + }, {}) + + return { + isAuthenticated: true, + user, + currentRole: user.role, + verifiedRoles: nextVerifiedRoles, + verificationStatus: nextVerificationStatus, + verificationReasons: {}, + notificationPrefs: state.notificationPrefs, + themePreference: themePreference ?? state.themePreference, + } + }), logout: () => set({ isAuthenticated: false,