Рабочий чат

This commit is contained in:
Халимов Рустам
2026-04-01 23:18:55 +03:00
parent 249c344df8
commit 4ae7dd60ce
42 changed files with 1016 additions and 184 deletions

View File

@@ -18,7 +18,11 @@ interface AuthState {
}
export const useAuthStore = create<AuthState>((set, get) => ({
token: localStorage.getItem('knot_token'),
token: (() => {
const t = localStorage.getItem('knot_token');
if (t) AuthApi.setToken(t);
return t;
})(),
user: null,
isLoading: true,
error: null,
@@ -83,7 +87,12 @@ export const useAuthStore = create<AuthState>((set, get) => ({
for (let attempt = 0; attempt < 3; attempt++) {
try {
AuthApi.setToken(token);
const { user } = await AuthApi.getMe();
const { user, token: newToken } = await AuthApi.getMe();
if (newToken && newToken.length > 0) {
localStorage.setItem('knot_token', newToken);
AuthApi.setToken(newToken);
set({ token: newToken });
}
connectSocket(token);
set({ user, isLoading: false });
await get().fetchConfig();
@@ -101,8 +110,23 @@ export const useAuthStore = create<AuthState>((set, get) => ({
}
}
console.warn('checkAuth failed:', lastError);
localStorage.removeItem('knot_token');
set({ token: null, user: null, isLoading: false });
// Explicitly check for 401 Unauthorized or 403 Forbidden
const status = (lastError as any)?.status;
const errorMsg = lastError instanceof Error ? lastError.message : String(lastError);
if (
status === 401 ||
status === 403 ||
errorMsg.includes('auth') ||
errorMsg.includes('Недействительный токен') ||
errorMsg.includes('Требуется авторизация')
) {
localStorage.removeItem('knot_token');
set({ token: null, user: null, isLoading: false });
} else {
// Keep the token but stop loading if we're just offline/network error/500
set({ isLoading: false });
}
},
updateUser: (data) => {