feat: password reset flow with welcome emails
- POST /auth/forgot-password with welcome/reset email templates - POST /auth/reset-password with Zod validation, 4-hour tokens - Per-email rate limiting (3/hr) via Valkey, no user enumeration - Login page "Forgot password?" toggle with inline form - /reset-password page for setting new password from email link - Initial user seed sends welcome email instead of requiring password - CLI script for force-resetting passwords via kubectl exec - APP_URL env var in chart, removed INITIAL_USER_PASSWORD Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -27,3 +27,14 @@ export const SetPinSchema = z.object({
|
||||
pin: z.string().min(4).max(6).regex(/^\d+$/, 'PIN must be digits only'),
|
||||
})
|
||||
export type SetPinInput = z.infer<typeof SetPinSchema>
|
||||
|
||||
export const ForgotPasswordSchema = z.object({
|
||||
email: z.string().email(),
|
||||
})
|
||||
export type ForgotPasswordInput = z.infer<typeof ForgotPasswordSchema>
|
||||
|
||||
export const ResetPasswordSchema = z.object({
|
||||
token: z.string().min(1),
|
||||
newPassword: z.string().min(12, 'Password must be at least 12 characters').max(128),
|
||||
})
|
||||
export type ResetPasswordInput = z.infer<typeof ResetPasswordSchema>
|
||||
|
||||
Reference in New Issue
Block a user