Compare commits

...

2 Commits

Author SHA1 Message Date
YuTengjing f4f7297295 🔒 fix: allow rateLimit passthrough and merge customRules
Spread customOptions.rateLimit (e.g. enabled, window, storage) into the
rateLimit block so callers can configure global settings without losing
the default customRules. customRules are deep-merged: caller-supplied
rules are appended after the built-in ones.
2026-03-08 12:42:32 +08:00
YuTengjing b813c4eb98 🔒 fix: add rate limit custom rules for password reset and email verification
Add stricter rate limiting (60s/3 requests) for `/request-password-reset` and
`/send-verification-email` endpoints which previously only had the loose global
rate limit (10s/100 requests).
2026-03-08 12:12:04 +08:00
+9
View File
@@ -90,6 +90,7 @@ async function customEmailValidator(email: string): Promise<boolean> {
interface CustomBetterAuthOptions {
plugins: BetterAuthPlugin[];
rateLimit?: BetterAuthOptions['rateLimit'];
}
export function defineConfig(customOptions: CustomBetterAuthOptions) {
@@ -253,6 +254,14 @@ export function defineConfig(customOptions: CustomBetterAuthOptions) {
},
},
},
rateLimit: {
...customOptions.rateLimit,
customRules: {
'/request-password-reset': { max: 3, window: 60 },
'/send-verification-email': { max: 3, window: 60 },
...customOptions.rateLimit?.customRules,
},
},
plugins: [
...customOptions.plugins,
emailWhitelist(),