@@ -127,7 +127,7 @@ export interface AccountsPasswordOptions {
127
127
* Function that check if the password is valid.
128
128
* This function will be called when you call `createUser` and `changePassword`.
129
129
*/
130
- validatePassword ?: ( password ?: string ) => boolean ;
130
+ validatePassword ?: < T extends User > ( password ?: string , user ?: T ) => Promise < boolean > ;
131
131
/**
132
132
* Function that check if the username is a valid username.
133
133
* This function will be called when you call `createUser`.
@@ -164,7 +164,7 @@ const defaultOptions = {
164
164
validateEmail ( email ?: string ) : boolean {
165
165
return isString ( email ) && isEmail ( email ) ;
166
166
} ,
167
- validatePassword ( password ?: string ) : boolean {
167
+ async validatePassword ( password ?: string ) : Promise < boolean > {
168
168
return isString ( password ) && password !== '' ;
169
169
} ,
170
170
validateUsername ( username ?: string ) : boolean {
@@ -365,12 +365,6 @@ export default class AccountsPassword<CustomUser extends User = User>
365
365
if ( ! token || ! isString ( token ) ) {
366
366
throw new AccountsJsError ( this . options . errors . invalidToken , ResetPasswordErrors . InvalidToken ) ;
367
367
}
368
- if ( ! this . options . validatePassword ( newPassword ) ) {
369
- throw new AccountsJsError (
370
- this . options . errors . invalidNewPassword ,
371
- ResetPasswordErrors . InvalidNewPassword
372
- ) ;
373
- }
374
368
375
369
const user = await this . db . findUserByResetPasswordToken ( token ) ;
376
370
if ( ! user ) {
@@ -380,6 +374,13 @@ export default class AccountsPassword<CustomUser extends User = User>
380
374
) ;
381
375
}
382
376
377
+ if ( ! ( await this . options . validatePassword ( newPassword , user ) ) ) {
378
+ throw new AccountsJsError (
379
+ this . options . errors . invalidNewPassword ,
380
+ ResetPasswordErrors . InvalidNewPassword
381
+ ) ;
382
+ }
383
+
383
384
const resetTokens = getUserResetTokens ( user ) ;
384
385
const resetTokenRecord = resetTokens . find ( ( t ) => t . token === token ) ;
385
386
@@ -471,15 +472,15 @@ export default class AccountsPassword<CustomUser extends User = User>
471
472
oldPassword : string ,
472
473
newPassword : string
473
474
) : Promise < void > {
474
- if ( ! this . options . validatePassword ( newPassword ) ) {
475
+ const user = await this . passwordAuthenticator ( { id : userId } , oldPassword ) ;
476
+
477
+ if ( ! ( await this . options . validatePassword ( newPassword , user ) ) ) {
475
478
throw new AccountsJsError (
476
479
this . options . errors . invalidPassword ,
477
480
ChangePasswordErrors . InvalidPassword
478
481
) ;
479
482
}
480
483
481
- const user = await this . passwordAuthenticator ( { id : userId } , oldPassword ) ;
482
-
483
484
const password = await this . options . hashPassword ( newPassword ) ;
484
485
await this . db . setPassword ( userId , password ) ;
485
486
@@ -676,7 +677,7 @@ export default class AccountsPassword<CustomUser extends User = User>
676
677
}
677
678
678
679
if ( user . password ) {
679
- if ( ! this . options . validatePassword ( user . password ) ) {
680
+ if ( ! ( await this . options . validatePassword ( user . password ) ) ) {
680
681
throw new AccountsJsError (
681
682
this . options . errors . invalidPassword ,
682
683
CreateUserErrors . InvalidPassword
0 commit comments