docs: specify required web login
This commit is contained in:
parent
c1151607ac
commit
dacca46fbe
1 changed files with 55 additions and 0 deletions
|
|
@ -0,0 +1,55 @@
|
||||||
|
# Require Web Login Design
|
||||||
|
|
||||||
|
## Goal
|
||||||
|
|
||||||
|
When a user opens the self-hosted Hoppscotch web frontend without an active
|
||||||
|
session, the app must not be usable. The user should see only a login page
|
||||||
|
until authentication succeeds.
|
||||||
|
|
||||||
|
## Scope
|
||||||
|
|
||||||
|
- Applies only to the web shell in `packages/hoppscotch-selfhost-web`.
|
||||||
|
- Does not change the desktop shell behavior.
|
||||||
|
- Does not change backend authentication endpoints or session semantics.
|
||||||
|
- Reuses the existing Hoppscotch auth platform and login UI.
|
||||||
|
|
||||||
|
## Architecture
|
||||||
|
|
||||||
|
The self-hosted web platform will register a root UI extension that acts as an
|
||||||
|
auth gate. The gate will subscribe to the existing `platform.auth` user stream
|
||||||
|
and render above the app only when the current platform is web and no confirmed
|
||||||
|
user exists.
|
||||||
|
|
||||||
|
The gate has three visible states:
|
||||||
|
|
||||||
|
- Auth check pending: show a centered spinner while `performAuthInit()` verifies
|
||||||
|
the cookie-backed session.
|
||||||
|
- Anonymous: show a full-screen login-only page using the existing
|
||||||
|
`FirebaseLogin` component.
|
||||||
|
- Authenticated: render nothing, allowing the normal Hoppscotch app to remain
|
||||||
|
usable.
|
||||||
|
|
||||||
|
## Data Flow
|
||||||
|
|
||||||
|
`performAuthInit()` already checks the backend session and updates
|
||||||
|
`currentUser$`. The auth gate must not perform its own token or cookie checks.
|
||||||
|
It only observes the existing stream, so login, logout, refresh, and local auth
|
||||||
|
continue to use the current implementation.
|
||||||
|
|
||||||
|
## Route Behavior
|
||||||
|
|
||||||
|
The gate blocks interaction with normal app routes by covering the UI, not by
|
||||||
|
redirecting. This avoids changing common router behavior and avoids breaking
|
||||||
|
special routes such as `/enter` and `/device-login`, which use the `empty`
|
||||||
|
layout and are outside the normal application shell.
|
||||||
|
|
||||||
|
## Testing
|
||||||
|
|
||||||
|
Add a focused unit test for the gate state logic:
|
||||||
|
|
||||||
|
- pending auth check requires the blocking screen;
|
||||||
|
- anonymous confirmed state requires the blocking screen;
|
||||||
|
- authenticated state does not block;
|
||||||
|
- desktop platform does not block.
|
||||||
|
|
||||||
|
Run the targeted test and a typecheck or lint command for the touched package.
|
||||||
Loading…
Reference in a new issue