Bug: Incomplete logout leaves UI stuck in authenticated state when channel is missing or access is denied in ChatHeader.js

Offen
#1,427 0 Kommentare 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen

Maintainer antworten meist innerhalb von 1 Tag

@yashsarvaiya45 arbeitet bereits daran.

Seit 15.11.2026.

  • #1428 von @yashsarvaiya45 — offen

Bewertung

Schwierigkeit
2/5
Geschätzter Aufwand
1-3 Stunden
Anfängerfreundlichkeit
25/100
Issue-Typ
Bug
Klarheit
Klar beschrieben
Aktivitätsstatus
Veraltet
Tech-Stack
javascript, react
Bereich
frontend

Rechercherichtung

Start in packages/react/src/views/ChatHeader/ChatHeader.js at getChannelInfo (lines 202–288) and compare its two error branches with handleLogout() in the same file, noting which state resets are skipped. Also inspect the unguarded RCInstance.channelInfo() and setMessageAllowed paths. Done means both error branches reach the logout state reset and null/rejected responses are handled; verify by authenticating with a non-existent roomId. A linked open pull request (#1428) already covers this work, so read it before starting.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Beschreibung

Description

In packages/react/src/views/ChatHeader/ChatHeader.js, when getChannelInfo encounters an 'error-room-not-found' or 'Not Allowed' error, it dispatches an error toast ("Logging out") and calls await RCInstance.logout() directly instead of invoking handleLogout().

Because handleLogout() is bypassed:

  1. setIsUserAuthenticated(false) is never called, leaving the React UI permanently stuck in the authenticated view even though the backend session has been terminated.
  2. Stores and UI state (setMessages([]), setChannelInfo({}), setShowSidebar(false), setUserAvatarUrl(null), and isMessageLoaded) are not reset.
  3. Additionally, getChannelInfo and setMessageAllowed lack try...catch blocks and safe optional chaining (res?.success, res && 'errorType' in res), which can cause an unhandled TypeError crash if RCInstance.channelInfo() returns undefined or rejects on network failure.
Affected File
  • packages/react/src/views/ChatHeader/ChatHeader.js (lines 202–288)
Steps to Reproduce
  1. Authenticate into EmbeddedChat configured with a non-existent roomId (error-room-not-found) or a restricted private room where the user lacks permission (Not Allowed).
  2. Observe the toast message: "Channel doesn't exist. Logging out." or "You don't have permission to access this channel. Logging out".
  3. Notice that while RCInstance.logout() runs, isUserAuthenticated remains true and the UI stays stuck in the logged-in state instead of returning to the login state.
Expected Behavior
  • Error-triggered logouts in getChannelInfo should call await handleLogout() so that isUserAuthenticated is set to false and all user/channel/message stores are properly cleared.
  • Async calls in getChannelInfo and setMessageAllowed should safely guard against null/undefined responses and network rejections.
Vorherrschende Sprache
JavaScript
Sterne
170
Forks
397
Ø Merge
12 T. 14 Std.
Gemergte PRs (30 T.)
6

Entwicklungsumgebung

  • Kein Dockerfile und keine Docker-Compose-Datei
  • Hat eine Pull-Request-Vorlage
  • Kein Beitragsleitfaden

Erste Schritte

  1. Lesen Sie das ganze Issue und danach den Beitragsleitfaden des Projekts.
  2. Schreiben Sie ins Issue, dass Sie es übernehmen — das erspart doppelte Arbeit.
  3. Forken Sie das Repository und arbeiten Sie in einem Branch.
  4. Öffnen Sie einen Pull Request, der die Issue-Nummer nennt.

Mehr aus RocketChat/EmbeddedChat

Alle Issues in RocketChat/EmbeddedChat

Ähnliche Issues

Weitere Issues zu JavaScript

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.