diff --git a/README.md b/README.md
index 1f7c6d0..2a6e9e0 100644
--- a/README.md
+++ b/README.md
@@ -8,7 +8,7 @@ Nuxt 4 app with:
- Redis-backed sessions and WebAuthn challenge storage
- Seeded `xiaomai` super-admin account
- Super-admin user creation and password reset flow
-- First-login enforcement: temporary password change plus passkey enrollment
+- First-login enforcement: temporary password change
## Environment
@@ -47,7 +47,7 @@ The backend bootstraps its schema automatically on startup and seeds this initia
- Username: `xiaomai`
- Temporary password: `123456`
-On first login, the user is forced to change that temporary password and register a passkey before accessing the protected area.
+On first login, the user is forced to change that temporary password before accessing the protected area. Passkey enrollment is available from Security, but optional.
## Production
@@ -136,7 +136,8 @@ docker compose -f docker-compose.yml -f docker-compose.dev.yml restart app
- Password login with Redis-backed session cookie
- Passkey login using WebAuthn discoverable credentials
- Super admin creates users with default password `123456`
-- Users must change password and set a passkey after first login
+- Users must change password after first login
+- Users can optionally register a passkey from Security
- Users can change their own password from Security
- Super admin can reset a user's password back to `123456`
diff --git a/app/pages/management/users/index.vue b/app/pages/management/users/index.vue
index 9dfbde6..009838f 100644
--- a/app/pages/management/users/index.vue
+++ b/app/pages/management/users/index.vue
@@ -93,8 +93,8 @@
size="sm"
/>
diff --git a/app/pages/security/index.vue b/app/pages/security/index.vue
index a2c80df..f94c7b1 100644
--- a/app/pages/security/index.vue
+++ b/app/pages/security/index.vue
@@ -59,8 +59,8 @@
diff --git a/shared/auth.ts b/shared/auth.ts
index 04b17e5..58b7fb3 100644
--- a/shared/auth.ts
+++ b/shared/auth.ts
@@ -93,13 +93,13 @@ export interface PasskeySummary {
}
export function needsUserOnboarding(
- user: Pick | null | undefined
+ user: Pick | null | undefined
) {
- return Boolean(user && (user.mustChangePassword || user.needsPasskeySetup))
+ return Boolean(user?.mustChangePassword)
}
export function getDefaultAuthenticatedPath(
- user: Pick
+ user: Pick
) {
if (needsUserOnboarding(user)) {
return '/security'