Hacktoberfest 2026: the issues maintainers tagged for October, open and beginner-friendly. Browse Hacktoberfest issues

🐛 Bug Report: Console `/join` shows an endless spinner for invited users who are not signed in

Open Beginner friendly
#14,611 0 comments 0 reactions 0 assignees View on GitHub

Maintainers usually reply within 1 day

Nobody has claimed this yet.

Assessment

Difficulty
2/5
Estimated time
1-3 hours
Newbie friendliness
72/100
Issue type
Bug
Clarity
Clearly specified
Activity status
Active
Tech stack
docker, react, typescript

Research direction

Start in src/lib/react-query/hooks/auth.ts, at consoleAccountQueryOptions(), and check how the account query's retryOnMount default interacts with AuthFlowAccountSwitcher, which calls useAuth() on the accept screen. Reproduce by opening /join with membershipId, userId, secret and teamId while signed out. Done when the accept screen appears for a guest without the spinner looping, and sign-in and organization pages still load.

Written by the indexing model from the issue text.

Description

product / auth product / console product / databases product / messaging product / self-hosted product / sites product / storage
👟 Reproduction steps
  1. Self-hosted Appwrite 2.5.0 with Console image appwrite/new:1.2.74-self-hosted.
  2. Organization → Members → Invite a new email address.
  3. Open the invite link (/join?membershipId=…&userId=…&secret=…&teamId=…) in a private window, i.e. not signed in.
👍 Expected behavior

The "Accept invitation" screen is shown and the invite can be accepted, as in 1.1.107-self-hosted (fix for #13724).

👎 Actual Behavior

A spinner is shown indefinitely. GET /v1/account returns 401 once, no further requests are made, and there is no error in the browser console. Users who are already signed in are not affected.

Cause: a render loop on the invite screen.

  1. For a guest, the account query ends with 401, useAuth().isLoading becomes false, and the screen switches from loading to accept.
  2. The accept screen renders AuthFlowAccountSwitcher, which calls useAuth() again.
  3. The new observer refetches the failed query on mount, because retryOnMount defaults to true in consoleAccountQueryOptions() (src/lib/react-query/hooks/auth.ts).
  4. The screen returns to loading, the switcher unmounts, the cached 401 is replayed, and the cycle repeats.

Adding retryOnMount: false to consoleAccountQueryOptions() fixes it. With this change applied to 1.2.74-self-hosted, the invite is accepted normally, and sign-in and the organization pages keep working.

Console image Guest on /join
1.1.107-self-hosted works
1.1.159-self-hosted endless spinner
1.2.74-self-hosted endless spinner
🎲 Appwrite version

Different version (specify in environment)

💻 Operating system

Linux

🧱 Your Environment

Appwrite 2.5.0 (also reproduced with 2.3.0), self-hosted with Docker Compose, Console appwrite/new:1.2.74-self-hosted. Reproduced on a fresh installation without modifications.

👀 Have you spent some time to check if this issue has been raised before?
  • I checked and didn't find similar issue

Related: #13724

🏢 Have you read the Code of Conduct?
Dominant language
TypeScript
Stars
57.7k
Forks
5.8k
Avg merge
19h 50m
Merged PRs (30d)
489

Getting set up

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

More from appwrite/appwrite

All issues in appwrite/appwrite

Similar issues

More TypeScript issues

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.