feat(07.3-03): frontend remember_me — checkbox + ref threading + store pass-through

- LoginView.vue: add rememberMe ref(false) + "Stay signed in for 30 days" checkbox in password step; thread rememberMe.value through all 3 submit handlers (submitPassword, submitTotp, submitBackupCode) (D-12)
- stores/auth.js: login() forwards options.rememberMe as remember_me in api.login body (D-12)
- api/client.js: no change needed — already forwards full body verbatim
- Frontend build passes (vite build exits 0)
This commit is contained in:
curo1305
2026-06-06 17:23:02 +02:00
parent 9cc11b5446
commit 21e5d27c90
2 changed files with 16 additions and 1 deletions
+1
View File
@@ -66,6 +66,7 @@ export const useAuthStore = defineStore('auth', () => {
password,
totp_code: options.totpCode ?? null,
backup_code: options.backupCode ?? null,
remember_me: options.rememberMe ?? false,
})
if (data.requires_totp) {
+15 -1
View File
@@ -27,6 +27,17 @@
/>
</div>
<!-- Stay signed in checkbox (D-12) -->
<div class="flex items-center gap-2">
<input
v-model="rememberMe"
id="remember-me"
type="checkbox"
class="rounded border-gray-300 text-indigo-600 focus:ring-indigo-500"
/>
<label for="remember-me" class="text-sm text-gray-600">Stay signed in for 30 days</label>
</div>
<!-- Form-level error -->
<div
v-if="error"
@@ -191,6 +202,7 @@ const totpInput = ref('')
const backupCodeInput = ref('')
const loading = ref(false)
const error = ref(null)
const rememberMe = ref(false)
// Step: 'password' | 'totp' | 'backup'
const step = ref('password')
@@ -225,7 +237,7 @@ async function submitPassword() {
loading.value = true
error.value = null
try {
const result = await authStore.login(email.value, password.value)
const result = await authStore.login(email.value, password.value, { rememberMe: rememberMe.value })
await handleLoginResult(result)
} catch (e) {
error.value = e.message
@@ -240,6 +252,7 @@ async function submitTotp() {
try {
const result = await authStore.login(email.value, password.value, {
totpCode: totpInput.value,
rememberMe: rememberMe.value,
})
await handleLoginResult(result)
} catch (e) {
@@ -255,6 +268,7 @@ async function submitBackupCode() {
try {
const result = await authStore.login(email.value, password.value, {
backupCode: backupCodeInput.value,
rememberMe: rememberMe.value,
})
await handleLoginResult(result)
} catch (e) {