fix(auth): preserve backend roles on login
This commit is contained in:
@@ -36,7 +36,7 @@ export default function LoginPage() {
|
|||||||
const onSubmit = async (data: z.infer<typeof loginSchema>) => {
|
const onSubmit = async (data: z.infer<typeof loginSchema>) => {
|
||||||
try {
|
try {
|
||||||
const user = await loginApi({ username: data.username, password: data.password })
|
const user = await loginApi({ username: data.username, password: data.password })
|
||||||
storeLogin(user, ["consumer", "player", "owner"])
|
storeLogin(user, user.verifiedRoles)
|
||||||
router.push("/")
|
router.push("/")
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
notifyInfo(toApiError(err).msg)
|
notifyInfo(toApiError(err).msg)
|
||||||
|
|||||||
@@ -84,7 +84,7 @@ export default function RegisterPage() {
|
|||||||
vcode: data.vcode,
|
vcode: data.vcode,
|
||||||
requestId,
|
requestId,
|
||||||
})
|
})
|
||||||
storeLogin(user, ["consumer"])
|
storeLogin(user, user.verifiedRoles ?? ["consumer"])
|
||||||
router.push("/")
|
router.push("/")
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
notifyInfo(toApiError(err).msg)
|
notifyInfo(toApiError(err).msg)
|
||||||
|
|||||||
@@ -45,7 +45,7 @@ export function LoginDialog({ open, onOpenChange }: LoginDialogProps) {
|
|||||||
const onSubmit = async (data: z.infer<typeof loginSchema>) => {
|
const onSubmit = async (data: z.infer<typeof loginSchema>) => {
|
||||||
try {
|
try {
|
||||||
const user = await loginApi({ username: data.username, password: data.password })
|
const user = await loginApi({ username: data.username, password: data.password })
|
||||||
storeLogin(user, ["consumer", "player", "owner"])
|
storeLogin(user, user.verifiedRoles)
|
||||||
consumePendingAction()
|
consumePendingAction()
|
||||||
onOpenChange(false)
|
onOpenChange(false)
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
|
|||||||
+19
-15
@@ -125,23 +125,27 @@ export const useAuthStore = create<AuthState>((set, get) => ({
|
|||||||
},
|
},
|
||||||
}
|
}
|
||||||
}),
|
}),
|
||||||
login: (user, verifiedRoles = ["consumer"], themePreference) =>
|
login: (user, verifiedRoles, themePreference) =>
|
||||||
set((state) => ({
|
set((state) => {
|
||||||
isAuthenticated: true,
|
const nextVerifiedRoles = verifiedRoles ?? user.verifiedRoles ?? [user.role]
|
||||||
user,
|
const nextVerificationStatus =
|
||||||
currentRole: user.role,
|
user.verificationStatus ??
|
||||||
verifiedRoles,
|
nextVerifiedRoles.reduce<Partial<Record<UserRole, VerificationStatus>>>((acc, role) => {
|
||||||
verificationStatus: verifiedRoles.reduce<Partial<Record<UserRole, VerificationStatus>>>(
|
|
||||||
(acc, role) => {
|
|
||||||
acc[role] = "approved"
|
acc[role] = "approved"
|
||||||
return acc
|
return acc
|
||||||
},
|
}, {})
|
||||||
{},
|
|
||||||
),
|
return {
|
||||||
verificationReasons: {},
|
isAuthenticated: true,
|
||||||
notificationPrefs: state.notificationPrefs,
|
user,
|
||||||
themePreference: themePreference ?? state.themePreference,
|
currentRole: user.role,
|
||||||
})),
|
verifiedRoles: nextVerifiedRoles,
|
||||||
|
verificationStatus: nextVerificationStatus,
|
||||||
|
verificationReasons: {},
|
||||||
|
notificationPrefs: state.notificationPrefs,
|
||||||
|
themePreference: themePreference ?? state.themePreference,
|
||||||
|
}
|
||||||
|
}),
|
||||||
logout: () =>
|
logout: () =>
|
||||||
set({
|
set({
|
||||||
isAuthenticated: false,
|
isAuthenticated: false,
|
||||||
|
|||||||
Reference in New Issue
Block a user