docs: Sign in and accounts, the login page beside API keys - #8
Merged
Merged
Conversation
A person signs in to the dashboard with a name and a password now, and the session lasts until sign out or until an admin revokes it. Programs keep presenting an API key. The docs had only the key half. - `security/sign-in.mdx`, new. Why there is a login, the first account on a fresh node and on a running fleet, signing in, the account page, the Users page and the two roles, the CLI, HTTPS before you hand out accounts (linking the TLS page), the two files and their modes, the guard rails, the open paths, the doctor's Login check, and a troubleshooting table: locked out, no accounts yet, a revoked session, a program answering 401. - `security/api-keys.mdx`. A note at the top that a key is for programs and a person signs in instead, and the two paths the sign-in needs in the exceptions table: `GET /api/auth/me` and `POST /api/auth/login`. The sentence that counted five exceptions no longer counts, since the count is what drifts. - `docs.json`. `security/sign-in` first in the Security group, next to API keys. No version number is claimed: the release that carries the login is named in the release notes. Links checked with `mintlify broken-links`. Co-authored-by: webdevtodayjason <jason4mail@gmail.com> Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com>
webdevtodayjason
added a commit
to getainode/ainode
that referenced
this pull request
Sep 22, 2026
The access control section said the key was the whole story and that the dashboard asks for it on first open. With the front door login (#261) a person signs in with a name and a password and keeps a session; a key is what a program presents. Documentation only, and `CHANGELOG.md` is not touched. - **A new paragraph in Access control**: what a person presents and what a program presents, the two setup commands on the master (`ainode auth user add <name> --admin`, then `ainode auth enable`), accounts replicated from the master with sessions per node, the two roles, the account page and the Users page, `~/.ainode/users.json` at 0600 with hashes only, and a link to the docs site's new page. - **The installer paragraph** no longer says the dashboard asks for the key on first open, because a person signs in there now. - **The keyless list** gains `/api/auth/me` and `/api/auth/login`, with the reason for each: the page has to be able to ask whether you are signed in, and the request that signs you in cannot need a session first. The join paragraph's "one of five keyless paths" drops the count, which is the half that drifts (`tests/test_join_flow.py` asserts the paths, never a number). - **The CLI reference** gains `ainode auth user add|list|passwd|disable|enable| remove` and `ainode auth session list|revoke|clear`. No version number is claimed and no feature row is added: the release that carries the login names it in the release notes. Docs site page: https://docs.ainode.dev/security/sign-in (getainode/ainode-docs#8). Co-authored-by: webdevtodayjason <jason4mail@gmail.com> Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com>
webdevtodayjason
added a commit
to getainode/ainode
that referenced
this pull request
Sep 22, 2026
The access control section said the key was the whole story and that the dashboard asks for it on first open. With the front door login (#261) a person signs in with a name and a password and keeps a session; a key is what a program presents. Documentation only, and `CHANGELOG.md` is not touched. - **A new paragraph in Access control**: what a person presents and what a program presents, the two setup commands on the master (`ainode auth user add <name> --admin`, then `ainode auth enable`), accounts replicated from the master with sessions per node, the two roles, the account page and the Users page, `~/.ainode/users.json` at 0600 with hashes only, and a link to the docs site's new page. - **The installer paragraph** no longer says the dashboard asks for the key on first open, because a person signs in there now. - **The keyless list** gains `/api/auth/me` and `/api/auth/login`, with the reason for each: the page has to be able to ask whether you are signed in, and the request that signs you in cannot need a session first. The join paragraph's "one of five keyless paths" drops the count, which is the half that drifts (`tests/test_join_flow.py` asserts the paths, never a number). - **The CLI reference** gains `ainode auth user add|list|passwd|disable|enable| remove` and `ainode auth session list|revoke|clear`. No version number is claimed and no feature row is added: the release that carries the login names it in the release notes. Docs site page: https://docs.ainode.dev/security/sign-in (getainode/ainode-docs#8). Co-authored-by: webdevtodayjason <jason4mail@gmail.com> Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com>
webdevtodayjason
added a commit
to getainode/ainode
that referenced
this pull request
Sep 22, 2026
The access control section said the key was the whole story and that the dashboard asks for it on first open. With the front door login (#261) a person signs in with a name and a password and keeps a session; a key is what a program presents. Documentation only, and `CHANGELOG.md` is not touched. - **A new paragraph in Access control**: what a person presents and what a program presents, the two setup commands on the master (`ainode auth user add <name> --admin`, then `ainode auth enable`), accounts replicated from the master with sessions per node, the two roles, the account page and the Users page, `~/.ainode/users.json` at 0600 with hashes only, and a link to the docs site's new page. - **The installer paragraph** no longer says the dashboard asks for the key on first open, because a person signs in there now. - **The keyless list** gains `/api/auth/me` and `/api/auth/login`, with the reason for each: the page has to be able to ask whether you are signed in, and the request that signs you in cannot need a session first. The join paragraph's "one of five keyless paths" drops the count, which is the half that drifts (`tests/test_join_flow.py` asserts the paths, never a number). - **The CLI reference** gains `ainode auth user add|list|passwd|disable|enable| remove` and `ainode auth session list|revoke|clear`. No version number is claimed and no feature row is added: the release that carries the login names it in the release notes. Docs site page: https://docs.ainode.dev/security/sign-in (getainode/ainode-docs#8). Co-authored-by: webdevtodayjason <jason4mail@gmail.com> Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
The docs half of the front door login (product #261). A person signs in to the dashboard with a name and a password, and the session lasts until sign out or until an admin revokes it. Programs keep presenting an API key. The docs described only the key half, so somebody opening a protected node had no page telling them how a person gets in.
The code is being built on three other branches. Nothing here claims a version: where the contract is not settled yet, the page says it is described in the release notes rather than guessing a number or a flag.
Pages touched
security/sign-in.mdxsecurity/api-keys.mdxGET /api/auth/meandPOST /api/auth/login. The sentence that counted "five exceptions" no longer counts, because a count is the thing that driftsdocs.jsonsecurity/sign-infirst in the Security group, next tosecurity/api-keysWhat the new page says
Authorization: Bearer <key>. One table, then a link to API keys for the key half.ainode auth user add <name> --admin(it prompts;--password-stdinfor a script), thenainode auth enableif the node is not already requiring auth. A fresh install already requires a key, so there it is one command.X-AINode-Client: dashboardon every dashboard write as the CSRF guard (another site can make your browser send the cookie, it cannot make it send that header), ten failed sign-ins in five minutes pausing that address, scrypt hashes.ainode auth user passwdfrom the node's own terminal, which needs no session), no accounts yet, a session that was revoked, a program answering 401, and one node signed in but not another.Gates
Left out
api-reference/overview.mdxstill describes the key as the only credential. The route shapes (POST /api/auth/login, logout, the session and user routes) are not in the contract I was given beyond the open-path list, and an API page that guesses request and response bodies is worse than no page.cluster/endpoint.mdxstill lists the exempt paths as "alongside/api/health,/api/auth/statusandPOST /api/cluster/join". It claims no count, and the api-keys table is the authority, so it was left alone.Product README and the changelog text for the release PR: getainode/ainode#263.