docs(user): pairing-code flow for device setup guides

The setup guides walked the retired broadcast-list approve ("your device
appears under Pending Device Registrations — click Approve"), which no
longer exists. Both now describe the pairing-code flow: the e-reader
displays a 6-digit code, you type it into Pair a Device on your own
account, and only whoever holds the device can read the code — the
family-server gap that motivated the change. Adds a Pairing Code Not
Accepted troubleshooting case, refreshes the security practices
(claim only codes you can see on a device you are holding), and aligns
the remaining approval/pending wording throughout.
This commit is contained in:
John O'Keefe committed 2026-11-02 16:11:31 -05:00
1 parent 3e98fadb9f
commit 5211edf264
2 files changed
+52 -28

No files matched your search

+41 -22
View File
@@ -1,4 +1,4 @@
<!-- Ground truth: bookhoard.koplugin main.lua (menu tree, defaults, approval <!-- Ground truth: bookhoard.koplugin main.lua (menu tree, defaults, pairing
flow) + the server-side koreader endpoints. Re-verify against the plugin flow) + the server-side koreader endpoints. Re-verify against the plugin
source when the plugin changes. KOReader ITSELF is out of scope: this source when the plugin changes. KOReader ITSELF is out of scope: this
guide supports the plugin only, and installation is delegated to the guide supports the plugin only, and installation is delegated to the
@@ -31,7 +31,7 @@ It also runs on Android tablets and phones — though on Android the dedicated
Before you begin, make sure you have: Before you begin, make sure you have:
- ✅ A Bookhoard instance running and accessible on your network - ✅ A Bookhoard instance running and accessible on your network
- ✅ A web browser logged in to your Bookhoard account (for device approval) - ✅ A web browser logged in to your Bookhoard account (to enter the pairing code)
- ✅ KOReader installed and running on your e-reader (see next section) - ✅ KOReader installed and running on your e-reader (see next section)
- ✅ Your device connected to the same Wi-Fi network as your Bookhoard instance - ✅ Your device connected to the same Wi-Fi network as your Bookhoard instance
@@ -55,8 +55,9 @@ whatever device you're on.
## Connecting KOReader to Bookhoard ## Connecting KOReader to Bookhoard
Setup is done **on the server**: you approve the device from the Bookhoard Setup is done **on the server**: your e-reader shows a pairing code, and you
web interface — no usernames, passwords, or tokens to type on the device. type it into your own account's Devices page — no usernames, passwords, or
tokens to type on the device.
### Step 1: Install the Bookhoard Plugin ### Step 1: Install the Bookhoard Plugin
@@ -88,23 +89,27 @@ Then restart KOReader.
### Step 3: Register the Device ### Step 3: Register the Device
1. In the same **Bookhoard sync** menu, tap **Register device** 1. In the same **Bookhoard sync** menu, tap **Register device**
2. On your computer or phone, open Bookhoard and go to the **Devices** page 2. Your e-reader displays a **6-digit pairing code**
(sidebar navigation) 3. On your computer or phone, open Bookhoard — logged into **your** account —
3. Your device appears under **Pending Device Registrations** — click and go to the **Devices** page (sidebar navigation)
**Approve** to connect it 4. Type the code into the **Pair a Device** field and click **Find device**,
then confirm on the card that appears
The plugin waits on the device and finishes by itself the moment you The code is the only way to claim the registration, and only someone holding
approve. Once approved, its credentials are stored automatically, sync the device can read it — so the device always lands in the account of the
events are armed, and Bookhoard's OPDS catalog is added to your KOReader — person who registered it. The plugin waits on the device and finishes by
no further configuration is needed. itself the moment you confirm. Once paired, its credentials are stored
automatically, sync events are armed, and Bookhoard's OPDS catalog is added to
your KOReader — no further configuration is needed.
> **Note:** Pending registrations expire after 5 minutes. If yours expires > **Note:** Pairing codes expire after 5 minutes. If yours expires
> ("Registration expired"), just tap **Register device** again and approve. > ("Registration expired"), just tap **Register device** again for a fresh
> one. Dismissing the waiting dialog on the device cancels the attempt.
### Auth Token (Advanced) ### Auth Token (Advanced)
The Devices page shows each KOReader device's **Auth Token**. You normally The Devices page shows each KOReader device's **Auth Token**. You normally
never need it (the plugin receives it automatically during approval), but it never need it (the plugin receives it automatically during pairing), but it
can be re-entered manually in the plugin settings if you're moving a setup can be re-entered manually in the plugin settings if you're moving a setup
between devices or debugging. between devices or debugging.
@@ -116,7 +121,7 @@ sync**. The menu changes shape depending on whether you are connected.
### Before you're connected ### Before you're connected
- **Server URL** — your server's address - **Server URL** — your server's address
- **Register device** — starts the approval flow above - **Register device** — starts the pairing flow above
### Once connected — one-tap actions ### Once connected — one-tap actions
@@ -132,7 +137,7 @@ sync**. The menu changes shape depending on whether you are connected.
### Automatically push progress ### Automatically push progress
This toggle is the on/off switch for background sync — **it starts off**, so This toggle is the on/off switch for background sync — **it starts off**, so
after approval, turn it on to get automatic syncing. With it on, progress after pairing, turn it on to get automatic syncing. With it on, progress
pushes as you read and on close/suspend; the plugin may prompt about turning pushes as you read and on close/suspend; the plugin may prompt about turning
Wi-Fi on at those moments depending on your device. Wi-Fi on at those moments depending on your device.
@@ -216,14 +221,26 @@ their progress syncs from the first page.
### Pending Registration Never Appears ### Pending Registration Never Appears
**Problem**: You entered the Server URL, but no pending registration shows in Bookhoard **Problem**: You entered the Server URL, but no pairing code shows on the device
**Solutions**: **Solutions**:
1. Verify the Server URL is correct (no trailing path — just the base address) 1. Verify the Server URL is correct (no trailing path — just the base address)
2. Make sure KOReader is connected to Wi-Fi 2. Make sure KOReader is connected to Wi-Fi
3. Check the Bookhoard server is reachable from the device's network 3. Check the Bookhoard server is reachable from the device's network
4. Registrations expire after 5 minutes — tap **Register device** again and approve quickly 4. Registrations expire after 5 minutes — tap **Register device** again
### Pairing Code Not Accepted
**Problem**: The Devices page says "No waiting device matches that code"
**Solutions**:
1. Re-read the code on the device — it refreshes on every **Register device** tap
2. Check you typed all 6 digits (spacing doesn't matter)
3. Codes expire after 5 minutes — register again on the device and type the new code
4. "Pairing code already used" means the device already paired (check the device list); otherwise register again
5. Too many attempts lock new tries for a minute — wait and retry
### Connection Refused ### Connection Refused
@@ -236,9 +253,9 @@ their progress syncs from the first page.
- Ensure the device is on the same Wi-Fi network as the server - Ensure the device is on the same Wi-Fi network as the server
- Use the server's LAN IP instead of `localhost` - Use the server's LAN IP instead of `localhost`
### Sync Not Working After Approval ### Sync Not Working After Pairing
**Problem**: Device shows as approved but changes don't appear in Bookhoard **Problem**: Device shows as paired but changes don't appear in Bookhoard
**Solutions**: **Solutions**:
@@ -271,7 +288,9 @@ For day-to-day control of the same question on the device itself, use the
1. **Use HTTPS**: If exposing Bookhoard beyond your LAN, configure SSL/TLS 1. **Use HTTPS**: If exposing Bookhoard beyond your LAN, configure SSL/TLS
2. **Network Security**: Ensure your Wi-Fi network is secure (WPA2/WPA3) 2. **Network Security**: Ensure your Wi-Fi network is secure (WPA2/WPA3)
3. **Device Authorization**: Only approve pending registrations you initiated 3. **Claim only codes you can see**: a pairing code is readable only on the
registering device's screen — never claim a code someone merely told you
if you can't see the device showing it
4. **Revoke lost devices**: Remove devices you no longer use from the Devices page 4. **Revoke lost devices**: Remove devices you no longer use from the Devices page
## Additional Resources ## Additional Resources
+11 -6
View File
@@ -17,9 +17,14 @@ notes — and every registered device pushes and pulls against it.
## Getting a device into the circle ## Getting a device into the circle
1. Connect the device to your server (each guide above walks its own path) 1. Connect the device to your server (each guide above walks its own path)
2. Approve the pending registration on the **Devices** page — the Android 2. Pair it on the **Devices** page — the Android app registers itself on
app registers itself on first login; KOReader asks from its plugin first login; KOReader shows a 6-digit pairing code that you type into
3. Done. Sync starts as soon as a device is approved **Pair a Device** on the page
3. Done. Sync starts as soon as a device is paired
Only the person holding the device can read its pairing code, so a device
always lands in the account of whoever registered it — even on a family
server where more than one person is logged in.
The **Devices** page is mission control: see every registered device and The **Devices** page is mission control: see every registered device and
when it was last seen, remove a device (revoking its access instantly), and when it was last seen, remove a device (revoking its access instantly), and
@@ -61,7 +66,7 @@ phone lands in the right place on an e-reader with different pagination.
**Bookmarks** — location, title, and when you made them. **Bookmarks** — location, title, and when you made them.
Everything above is per-user and private: your devices see your data Everything above is per-user and private: your devices see your data
because you approved them, other users see theirs, and revoking a device because you paired them, other users see theirs, and revoking a device
ends its access on the spot. ends its access on the spot.
## Conflicts ## Conflicts
@@ -98,13 +103,13 @@ alone.
## Troubleshooting ## Troubleshooting
**Progress not updating** **Progress not updating**
Check the device is still on the **Devices** page and was approved; check Check the device is still on the **Devices** page and was paired; check
the server URL in the device's settings; confirm the device can reach the the server URL in the device's settings; confirm the device can reach the
server (open the server URL in the device's browser as a test). server (open the server URL in the device's browser as a test).
**"Device not found"** **"Device not found"**
The device was removed or its token revoked — register it again and The device was removed or its token revoked — register it again and
approve it. enter the fresh pairing code.
**A conflict keeps coming back** **A conflict keeps coming back**
Two devices are genuinely fighting over the same book. Decide which device Two devices are genuinely fighting over the same book. Decide which device