diff --git a/internal/http/handlers/chat.go b/internal/http/handlers/chat.go index 05fbf67..8857526 100644 --- a/internal/http/handlers/chat.go +++ b/internal/http/handlers/chat.go @@ -54,23 +54,30 @@ func (h *ChatHandler) HandleWebSocket(w http.ResponseWriter, r *http.Request) { log.Printf("WebSocket: токен из куки: %s", token) } - // 2. Если нет в куках, проверяем заголовок Authorization + // Из заголовка Authorization + if authHeader := r.Header.Get("Authorization"); authHeader != "" { + token = strings.TrimPrefix(authHeader, "Bearer ") + } + + // Из параметра URL if token == "" { - authHeader := r.Header.Get("Authorization") - if authHeader != "" { - token = strings.TrimPrefix(authHeader, "Bearer ") - log.Printf("WebSocket: токен из заголовка: %s", token) + token = r.URL.Query().Get("token") + } + + // Из куков + if token == "" { + if cookie, err := r.Cookie("accessToken"); err == nil { + token = cookie.Value } } - // 3. Если токен не найден - возвращаем 401 if token == "" { - log.Println("WebSocket: токен не найден ни в куках, ни в заголовках") + log.Println("WebSocket: токен не найден") http.Error(w, "Token is required", http.StatusUnauthorized) return } - // 4. Валидация токена + // Валидация токена userID, err := h.tokenAuth.ValidateAccessToken(token) if err != nil { log.Printf("WebSocket: ошибка валидации токена: %v", err)