SigNoz/signoz · error · errors.Error
ErrCodeResetPasswordTokenExpired
ErrCodeResetPasswordTokenExpired
Error message
reset password token has expired
What it means
The supplied password-reset token exists in the store but its expiration timestamp has passed. Returned as TypeUnauthenticated from VerifyResetPasswordToken when resetPasswordToken.IsExpired() is true.
Source
Thrown at pkg/modules/user/impluser/getter.go:145
return module.userRoleStore.GetUserRoleByOrgIDAndID(ctx, orgID, id)
}
func (module *getter) GetResetPasswordTokenByOrgIDAndUserID(ctx context.Context, orgID valuer.UUID, userID valuer.UUID) (*types.ResetPasswordToken, error) {
return module.store.GetResetPasswordTokenByOrgIDAndUserID(ctx, orgID, userID)
}
func (module *getter) GetUsersByOrgIDAndRoleID(ctx context.Context, orgID valuer.UUID, roleID valuer.UUID) ([]*types.User, error) {
return module.store.GetUsersByOrgIDAndRoleID(ctx, orgID, roleID)
}
func (module *getter) VerifyResetPasswordToken(ctx context.Context, token string) error {
resetPasswordToken, err := module.store.GetResetPasswordToken(ctx, token)
if err != nil {
return err
}
if resetPasswordToken.IsExpired() {
return errors.New(errors.TypeUnauthenticated, types.ErrCodeResetPasswordTokenExpired, "reset password token has expired")
}
return nil
}
func (module *getter) OnBeforeRoleDelete(ctx context.Context, orgID valuer.UUID, roleID valuer.UUID, _ string) error {
users, err := module.GetUsersByOrgIDAndRoleID(ctx, orgID, roleID)
if err != nil {
return err
}
if len(users) > 0 {
return errors.New(errors.TypeInvalidInput, authtypes.ErrCodeRoleHasUserAssignees, "role has active user assignments, remove them before deleting")
}
return nil
}
View on GitHub (pinned to 5069bf80b0)
Solutions
- Request a new password reset token (restart the forgot-password flow)
- Check/increase the reset token TTL configuration if users routinely exceed it
- Ensure server clocks are in sync (NTP) so tokens don't appear expired prematurely
Defensive patterns
Strategy: try-catch
Try / catch
err := verifyResetPasswordToken(ctx, token)
if err != nil && errors.Ast(err, errors.TypeUnauthenticated) && strings.Contains(err.Error(), "expired") {
// prompt user to request a new reset email
} Prevention
- Start the reset flow only when the user is ready to complete it
- Handle 401-on-verify by transparently re-issuing a forgot-password request
When it happens
Trigger: Calling the verify-reset-password-token endpoint (or ResetPassword flow) with a token older than the configured TTL; reusing a token from an old email after it expired.
Common situations: User waits too long before clicking the reset link; token was generated by an older deployment with different TTL; clock skew between services.
Related errors
- ErrCodeResetPasswordTokenExpired
- CodeUnsupported
- ErrCodeIncorrectPassword
- ErrCodeRoleHasUserAssignees
- ErrCodeUserDeprecated
AI-assisted analysis of SigNoz/signoz@5069bf80b0 (2026-08-28).
Data as JSON: /api/errors/f35c3c9c34eed4c7.
Report an issue: GitHub.