web: fix auth session races, ws token drift, and unread clear behavior
Some checks failed
CI / test (push) Failing after 2m20s
Some checks failed
CI / test (push) Failing after 2m20s
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
import { create } from "zustand";
|
||||
import { loginRequest, meRequest, refreshRequest } from "../api/auth";
|
||||
import type { AuthUser } from "../chat/types";
|
||||
import { useChatStore } from "./chatStore";
|
||||
|
||||
interface AuthState {
|
||||
accessToken: string | null;
|
||||
@@ -25,7 +26,7 @@ export const useAuthStore = create<AuthState>((set, get) => ({
|
||||
setTokens: (accessToken, refreshToken) => {
|
||||
localStorage.setItem(ACCESS_KEY, accessToken);
|
||||
localStorage.setItem(REFRESH_KEY, refreshToken);
|
||||
set({ accessToken, refreshToken });
|
||||
set({ accessToken, refreshToken, me: null });
|
||||
},
|
||||
login: async (email, password, otpCode, recoveryCode) => {
|
||||
set({ loading: true });
|
||||
@@ -38,8 +39,15 @@ export const useAuthStore = create<AuthState>((set, get) => ({
|
||||
}
|
||||
},
|
||||
loadMe: async () => {
|
||||
const tokenAtStart = get().accessToken;
|
||||
if (!tokenAtStart) {
|
||||
set({ me: null });
|
||||
return;
|
||||
}
|
||||
const me = await meRequest();
|
||||
set({ me });
|
||||
if (get().accessToken === tokenAtStart) {
|
||||
set({ me });
|
||||
}
|
||||
},
|
||||
refresh: async () => {
|
||||
const token = get().refreshToken;
|
||||
@@ -53,6 +61,7 @@ export const useAuthStore = create<AuthState>((set, get) => ({
|
||||
logout: () => {
|
||||
localStorage.removeItem(ACCESS_KEY);
|
||||
localStorage.removeItem(REFRESH_KEY);
|
||||
useChatStore.getState().reset();
|
||||
set({ accessToken: null, refreshToken: null, me: null });
|
||||
}
|
||||
}));
|
||||
|
||||
Reference in New Issue
Block a user