Рабочий чат
This commit is contained in:
@@ -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) => {
|
||||
|
||||
Reference in New Issue
Block a user