Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
19 commits
Select commit Hold shift + click to select a range
be6d2f9
Add user password history entity.
maliming Oct 7, 2025
62d6331
Add setting to enable password reuse prevention
maliming Oct 7, 2025
b1a9ddb
Add UserPasswordHistories DbSet to IIdentityDbContext
maliming Oct 7, 2025
685714e
Revert "Add UserPasswordHistories DbSet to IIdentityDbContext"
maliming Oct 7, 2025
5684073
Remove UserPasswordHistories DbSet and update model builder
maliming Oct 7, 2025
ecee36b
Add password history validation message
maliming Oct 8, 2025
7a2bc0d
Update modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identit…
maliming Oct 8, 2025
66ab43b
Update modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identit…
maliming Oct 8, 2025
a2c5e1e
Initial plan
Copilot Oct 8, 2025
4317bac
Add PasswordInHistory localization to all language files
Copilot Oct 8, 2025
9673e0a
Merge pull request #23907 from abpframework/copilot/add-password-hist…
maliming Oct 8, 2025
404881c
Add PasswordHistories relationship to User entity
maliming Oct 8, 2025
46323e5
Add password reuse prevention localization keys
maliming Oct 8, 2025
5a175b3
Initial plan
Copilot Oct 8, 2025
3fdd637
Add password reuse prevention localization to all Identity module lan…
Copilot Oct 8, 2025
8209420
Fix translations: Replace English text with proper localized translat…
Copilot Oct 8, 2025
910b8e9
Merge pull request #23909 from abpframework/copilot/add-password-reus…
maliming Oct 8, 2025
7d63a83
Change CreatedAt to DateTimeOffset in password history
maliming Oct 8, 2025
cfec02e
Remove UserPasswordHistories collection from MongoDbContext
maliming Oct 8, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
namespace Volo.Abp.Identity;

public class IdentityUserPasswordHistoriesConsts
{
/// <summary>
/// Default value: 256
/// </summary>
public static int MaxPasswordLength { get; set; } = 256;
}
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,7 @@
"Volo.Abp.Identity:PasswordRequiresUpper": "يجب أن تحتوي كلمات المرور على حرف كبير واحد على الأقل ('A' - 'Z').",
"Volo.Abp.Identity:PasswordTooShort": "يجب أن تتكون كلمات المرور من {0} حرف على الأقل.",
"Volo.Abp.Identity:PasswordRequiresUniqueChars": "يجب أن تحتوي كلمات المرور على {0} حرف فريد على الأقل.",
"Volo.Abp.Identity:PasswordInHistory": "يجب ألا تتطابق كلمات المرور مع آخر {0} كلمات مرور.",
"Volo.Abp.Identity:RoleNotFound": "الدور {0} غير موجود.",
"Volo.Abp.Identity:UserAlreadyHasPassword": "لدى المستخدم بالفعل مجموعة كلمات مرور.",
"Volo.Abp.Identity:UserAlreadyInRole": "المستخدم بالفعل في الدور '{0}'.",
Expand Down Expand Up @@ -98,6 +99,8 @@
"DisplayName:Abp.Identity.Password.RequireDigit": "الرقم المطلوب",
"DisplayName:Abp.Identity.Password.ForceUsersToPeriodicallyChangePassword": "إجبار المستخدمين على تغيير كلمة المرور بشكل دوري",
"DisplayName:Abp.Identity.Password.PasswordChangePeriodDays": "تغيير كلمة المرور بشكل دوري",
"DisplayName:Abp.Identity.Password.EnablePreventPasswordReuse": "تمكين منع إعادة استخدام كلمة المرور",
"DisplayName:Abp.Identity.Password.PreventPasswordReuseCount": "عدد مرات منع إعادة استخدام كلمة المرور",
"DisplayName:Abp.Identity.Lockout.AllowedForNewUsers": "ممكّن للمستخدمين الجدد",
"DisplayName:Abp.Identity.Lockout.LockoutDuration": "مدة التأمين (بالثواني)",
"DisplayName:Abp.Identity.Lockout.MaxFailedAccessAttempts": "محاولات الوصول الفاشلة",
Expand All @@ -114,6 +117,8 @@
"Description:Abp.Identity.Password.RequireDigit": "إذا كانت كلمات المرور يجب أن تحتوي على رقم.",
"Description:Abp.Identity.Password.ForceUsersToPeriodicallyChangePassword": "إذا كان يجب أن يتغير كلمة المرور بشكل دوري.",
"Description:Abp.Identity.Password.PasswordChangePeriodDays": "عدد الأيام التي يجب أن تتراوح بين تغيير كلمة المرور.",
"Description:Abp.Identity.Password.EnablePreventPasswordReuse": "ما إذا كان يجب منع المستخدمين من إعادة استخدام كلمات المرور السابقة.",
"Description:Abp.Identity.Password.PreventPasswordReuseCount": "عدد كلمات المرور السابقة التي لا يمكن إعادة استخدامها.",
"Description:Abp.Identity.Lockout.AllowedForNewUsers": "ما إذا كان يمكن قفل مستخدم جديد.",
"Description:Abp.Identity.Lockout.LockoutDuration": "المدة التي يتم فيها حظر المستخدم عند حدوث قفل.",
"Description:Abp.Identity.Lockout.MaxFailedAccessAttempts": "عدد محاولات الوصول الفاشلة المسموح بها قبل قفل المستخدم ، بافتراض تمكين التأمين.",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,7 @@
"Volo.Abp.Identity:PasswordRequiresUpper": "Hesla musí obsahovat alespoň jedno velké písmeno ('A'-'Z').",
"Volo.Abp.Identity:PasswordTooShort": "Hesla musí být dlouhá alespoň {0} znaků.",
"Volo.Abp.Identity:PasswordRequiresUniqueChars": "Hesla nesmí obsahovat více než {0} opakujících se znaků.",
"Volo.Abp.Identity:PasswordInHistory": "Hesla se nesmí shodovat s posledními {0} hesly.",
"Volo.Abp.Identity:RoleNotFound": "Role {0} neexistuje.",
"Volo.Abp.Identity:UserAlreadyHasPassword": "Uživatel již má nastavené heslo.",
"Volo.Abp.Identity:UserAlreadyInRole": "Uživatel již je v roli '{0}'.",
Expand Down Expand Up @@ -98,6 +99,8 @@
"DisplayName:Abp.Identity.Password.RequireDigit": "Požadováno číslo",
"DisplayName:Abp.Identity.Password.ForceUsersToPeriodicallyChangePassword": "Vynutit uživatelům pravidelnou změnu hesla",
"DisplayName:Abp.Identity.Password.PasswordChangePeriodDays": "Délka platnosti hesla (dny)",
"DisplayName:Abp.Identity.Password.EnablePreventPasswordReuse": "Povolit zabránění opětovnému použití hesla",
"DisplayName:Abp.Identity.Password.PreventPasswordReuseCount": "Počet zabránění opětovnému použití hesla",
"DisplayName:Abp.Identity.Lockout.AllowedForNewUsers": "Povoleno pro nové uživatele",
"DisplayName:Abp.Identity.Lockout.LockoutDuration": "Délka blokování (sekundy)",
"DisplayName:Abp.Identity.Lockout.MaxFailedAccessAttempts": "Maximální počet neúspěšných pokusů o přístup",
Expand All @@ -114,6 +117,8 @@
"Description:Abp.Identity.Password.RequireDigit": "Pokud hesla musí obsahovat číslici.",
"Description:Abp.Identity.Password.ForceUsersToPeriodicallyChangePassword": "Zda musí uživatelé pravidelně měnit heslo.",
"Description:Abp.Identity.Password.PasswordChangePeriodDays": "Počet dní, po které je heslo uživatele platné.",
"Description:Abp.Identity.Password.EnablePreventPasswordReuse": "Zda zabránit uživatelům v opětovném použití jejich předchozích hesel.",
"Description:Abp.Identity.Password.PreventPasswordReuseCount": "Počet předchozích hesel, která nelze znovu použít.",
"Description:Abp.Identity.Lockout.AllowedForNewUsers": "Zda může být uzamčen nový uživatel.",
"Description:Abp.Identity.Lockout.LockoutDuration": "Doba, po kterou je uživatel zablokován, když dojde k zablokování.",
"Description:Abp.Identity.Lockout.MaxFailedAccessAttempts": "Počet neúspěšných pokusů o přístup než je uživatel uzamčen, za předpokladu, že je uzamčení povoleno.",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,7 @@
"Volo.Abp.Identity:PasswordRequiresUpper": "Passwörter müssen mindestens einen Großbuchstaben ('A' - 'Z') enthalten.",
"Volo.Abp.Identity:PasswordTooShort": "Passwörter müssen mindestens {0} Zeichen lang sein.",
"Volo.Abp.Identity:PasswordRequiresUniqueChars": "Passwörter dürfen nicht mehr als {0} aufeinanderfolgende identische Zeichen enthalten.",
"Volo.Abp.Identity:PasswordInHistory": "Passwörter dürfen nicht mit Ihren letzten {0} Passwörtern übereinstimmen.",
"Volo.Abp.Identity:RoleNotFound": "Rolle {0} existiert nicht.",
"Volo.Abp.Identity:UserAlreadyHasPassword": "Der Benutzer hat bereits ein Passwort festgelegt.",
"Volo.Abp.Identity:UserAlreadyInRole": "Benutzer bereits in Rolle '{0}'.",
Expand Down Expand Up @@ -98,6 +99,8 @@
"DisplayName:Abp.Identity.Password.RequireDigit": "Erforderliche Ziffer",
"DisplayName:Abp.Identity.Password.ForceUsersToPeriodicallyChangePassword": "Benutzer müssen das Passwort regelmäßig ändern",
"DisplayName:Abp.Identity.Password.PasswordChangePeriodDays": "Passwortänderungszeitraum (Tage)",
"DisplayName:Abp.Identity.Password.EnablePreventPasswordReuse": "Wiederverwendung von Passwörtern verhindern aktivieren",
"DisplayName:Abp.Identity.Password.PreventPasswordReuseCount": "Anzahl der zu verhindernden Passwortwiederverwendungen",
"DisplayName:Abp.Identity.Lockout.AllowedForNewUsers": "Für neue Benutzer aktiviert",
"DisplayName:Abp.Identity.Lockout.LockoutDuration": "Sperrdauer (Sekunden)",
"DisplayName:Abp.Identity.Lockout.MaxFailedAccessAttempts": "Max. Fehlgeschlagene Zugriffsversuche",
Expand All @@ -114,6 +117,8 @@
"Description:Abp.Identity.Password.RequireDigit": "Wenn Passwörter eine Ziffer enthalten müssen.",
"Description:Abp.Identity.Password.ForceUsersToPeriodicallyChangePassword": "Gibt an, ob Benutzer das Passwort regelmäßig ändern müssen.",
"Description:Abp.Identity.Password.PasswordChangePeriodDays": "Die Anzahl der Tage, nach denen ein Benutzer das Passwort ändern muss.",
"Description:Abp.Identity.Password.EnablePreventPasswordReuse": "Ob verhindert werden soll, dass Benutzer ihre vorherigen Passwörter wiederverwenden.",
"Description:Abp.Identity.Password.PreventPasswordReuseCount": "Die Anzahl der vorherigen Passwörter, die nicht wiederverwendet werden können.",
"Description:Abp.Identity.Lockout.AllowedForNewUsers": "Gibt an, ob ein neuer Benutzer gesperrt werden kann.",
"Description:Abp.Identity.Lockout.LockoutDuration": "Die Dauer, für die ein Benutzer gesperrt ist, wenn eine Sperre auftritt.",
"Description:Abp.Identity.Lockout.MaxFailedAccessAttempts": "Die Anzahl der fehlgeschlagenen Zugriffsversuche, die zulässig sind, bevor ein Benutzer gesperrt wird, sofern die Sperre aktiviert ist.",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@
"Volo.Abp.Identity:ConcurrencyFailure": "Ο έλεγχος συγχρονισμού απέτυχε. Η οντότητα στην οποία εργάζεστε έχει τροποποιηθεί από άλλο χρήστη. Απορρίψτε τις αλλαγές σας και δοκιμάστε ξανά.",
"Volo.Abp.Identity:DuplicateEmail": "Το email '{0}' υπάρχει ήδη.",
"Volo.Abp.Identity:DuplicateRoleName": "Το όνομα ρόλου '{0}' υπάρχει ήδη.",
"Volo.Abp.Identity:DuplicateUserName":"Το Όνομα χρήστη'{0}'υπάρχει ήδη.",
"Volo.Abp.Identity:DuplicateUserName": "Το Όνομα χρήστη'{0}'υπάρχει ήδη.",
"Volo.Abp.Identity:InvalidEmail": "Το email '{0}' δεν είναι έγκυρο.",
"Volo.Abp.Identity:InvalidPasswordHasherCompatibilityMode": "Η παρεχόμενη λειτουργία PasswordHasherCompatibilityMode δεν είναι έγκυρη.",
"Volo.Abp.Identity:InvalidPasswordHasherIterationCount": "Το πλήθος των επαναλήψεων πρέπει να είναι θετικός ακέραιος.",
Expand All @@ -56,6 +56,7 @@
"Volo.Abp.Identity:PasswordRequiresUpper": "Οι κωδικοί πρόσβασης πρέπει να έχουν τουλάχιστον ένα κεφαλαίο ('A'-'Z').",
"Volo.Abp.Identity:PasswordTooShort": "Οι κωδικοί πρόσβασης πρέπει να είναι τουλάχιστον {0} χαρακτήρες.",
"Volo.Abp.Identity:PasswordRequiresUniqueChars": "Οι κωδικοί πρόσβασης πρέπει να έχουν τουλάχιστον {0} μοναδικούς χαρακτήρες.",
"Volo.Abp.Identity:PasswordInHistory": "Οι κωδικοί πρόσβασης δεν πρέπει να ταιριάζουν με τους τελευταίους {0} κωδικούς πρόσβασής σας.",
"Volo.Abp.Identity:RoleNotFound": "Ο ρόλος {0} δεν υπάρχει",
"Volo.Abp.Identity:UserAlreadyHasPassword": "Ο χρήστης έχει ήδη ορίσει κωδικό πρόσβασης.",
"Volo.Abp.Identity:UserAlreadyInRole": "Χρήστης ήδη στο ρόλο '{0}'.",
Expand Down Expand Up @@ -97,6 +98,8 @@
"DisplayName:Abp.Identity.Password.RequireDigit": "Απαιτούμενο ψηφίο",
"DisplayName:Abp.Identity.Password.ForceUsersToPeriodicallyChangePassword": "Επιβάλλεται η αλλαγή του κωδικού πρόσβασης",
"DisplayName:Abp.Identity.Password.PasswordChangePeriodDays": "Διάρκεια κωδικού πρόσβασης (ημέρες)",
"DisplayName:Abp.Identity.Password.EnablePreventPasswordReuse": "Ενεργοποίηση αποτροπής επαναχρησιμοποίησης κωδικού πρόσβασης",
"DisplayName:Abp.Identity.Password.PreventPasswordReuseCount": "Αριθμός αποτροπής επαναχρησιμοποίησης κωδικού πρόσβασης",
"DisplayName:Abp.Identity.Lockout.AllowedForNewUsers": "Ενεργοποιήθηκε για νέους χρήστες",
"DisplayName:Abp.Identity.Lockout.LockoutDuration": "Διάρκεια κλειδώματος (δευτερόλεπτα)",
"DisplayName:Abp.Identity.Lockout.MaxFailedAccessAttempts": "Μέγιστες αποτυχημένες προσπάθειες πρόσβασης",
Expand All @@ -113,6 +116,8 @@
"Description:Abp.Identity.Password.RequireDigit": "Εάν οι κωδικοί πρόσβασης πρέπει να περιέχουν ένα ψηφίο.",
"Description:Abp.Identity.Password.ForceUsersToPeriodicallyChangePassword": "Εάν οι χρήστες πρέπει να αλλάζουν τον κωδικό πρόσβασης τους με συχνότητα που ορίζεται από το PasswordChangePeriodDays.",
"Description:Abp.Identity.Password.PasswordChangePeriodDays": "Η διάρκεια της περιόδου σε ημέρες μετά την οποία οι χρήστες πρέπει να αλλάζουν τον κωδικό πρόσβασης τους.",
"Description:Abp.Identity.Password.EnablePreventPasswordReuse": "Εάν πρέπει να αποτραπεί η επαναχρησιμοποίηση προηγούμενων κωδικών πρόσβασης από τους χρήστες.",
"Description:Abp.Identity.Password.PreventPasswordReuseCount": "Ο αριθμός των προηγούμενων κωδικών πρόσβασης που δεν μπορούν να επαναχρησιμοποιηθούν.",
"Description:Abp.Identity.Lockout.AllowedForNewUsers": "Εάν ένας νέος χρήστης μπορεί να κλειδωθεί.",
"Description:Abp.Identity.Lockout.LockoutDuration": "Η διάρκεια για την οποία ένας χρήστης είναι κλειδωμένος όταν εμφανίζεται ένα κλείδωμα.",
"Description:Abp.Identity.Lockout.MaxFailedAccessAttempts": "Ο αριθμός των αποτυχημένων προσπαθειών πρόσβασης που επιτρέπονται πριν από το κλείδωμα ενός χρήστη, με την προϋπόθεση ότι το κλείδωμα είναι ενεργοποιημένο.",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,7 @@
"Volo.Abp.Identity:PasswordRequiresUpper": "Passwords must have at least one uppercase ('A'-'Z').",
"Volo.Abp.Identity:PasswordTooShort": "Passwords must be at least {0} characters.",
"Volo.Abp.Identity:PasswordRequiresUniqueChars": "Passwords must use at least {0} different characters.",
"Volo.Abp.Identity:PasswordInHistory": "Passwords must not match your last {0} passwords.",
"Volo.Abp.Identity:RoleNotFound": "Role {0} does not exist.",
"Volo.Abp.Identity:UserAlreadyHasPassword": "User already has a password set.",
"Volo.Abp.Identity:UserAlreadyInRole": "User is already in role '{0}'.",
Expand Down Expand Up @@ -102,6 +103,8 @@
"DisplayName:Abp.Identity.Password.RequireDigit": "Required digit",
"DisplayName:Abp.Identity.Password.ForceUsersToPeriodicallyChangePassword": "Force users to periodically change password",
"DisplayName:Abp.Identity.Password.PasswordChangePeriodDays": "Password change period(days)",
"DisplayName:Abp.Identity.Password.EnablePreventPasswordReuse": "Enable prevent password reuse",
"DisplayName:Abp.Identity.Password.PreventPasswordReuseCount": "Prevent password reuse count",
"DisplayName:Abp.Identity.Lockout.AllowedForNewUsers": "Enabled for new users",
"DisplayName:Abp.Identity.Lockout.LockoutDuration": "Lockout duration(in seconds)",
"DisplayName:Abp.Identity.Lockout.MaxFailedAccessAttempts": "Max failed access attempts",
Expand All @@ -118,6 +121,8 @@
"Description:Abp.Identity.Password.RequireDigit": "If passwords must contain a digit.",
"Description:Abp.Identity.Password.ForceUsersToPeriodicallyChangePassword": "Whether users are required to periodically change their password.",
"Description:Abp.Identity.Password.PasswordChangePeriodDays": "The number of days a user's password is valid for.",
"Description:Abp.Identity.Password.EnablePreventPasswordReuse": "Whether to prevent users from reusing their previous passwords.",
"Description:Abp.Identity.Password.PreventPasswordReuseCount": "The number of previous passwords that cannot be reused.",
"Description:Abp.Identity.Lockout.AllowedForNewUsers": "Whether a new user can be locked out.",
"Description:Abp.Identity.Lockout.LockoutDuration": "The duration a user is locked out for when a lockout occurs.",
"Description:Abp.Identity.Lockout.MaxFailedAccessAttempts": "The number of failed access attempts allowed before a user is locked out, assuming lock out is enabled.",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,7 @@
"Volo.Abp.Identity:PasswordRequiresUpper": "Passwords must have at least one uppercase ('A'-'Z').",
"Volo.Abp.Identity:PasswordTooShort": "Passwords must be at least {0} characters.",
"Volo.Abp.Identity:PasswordRequiresUniqueChars": "Passwords must use at least {0} different characters.",
"Volo.Abp.Identity:PasswordInHistory": "Passwords must not match your last {0} passwords.",
"Volo.Abp.Identity:RoleNotFound": "Role {0} does not exist.",
"Volo.Abp.Identity:UserAlreadyHasPassword": "User already has a password set.",
"Volo.Abp.Identity:UserAlreadyInRole": "User already in role '{0}'.",
Expand Down Expand Up @@ -98,6 +99,8 @@
"DisplayName:Abp.Identity.Password.RequireDigit": "Required digit",
"DisplayName:Abp.Identity.Password.ForceUsersToPeriodicallyChangePassword": "Force users to periodically change password",
"DisplayName:Abp.Identity.Password.PasswordChangePeriodDays": "Password change period(days)",
"DisplayName:Abp.Identity.Password.EnablePreventPasswordReuse": "Enable prevent password reuse",
"DisplayName:Abp.Identity.Password.PreventPasswordReuseCount": "Prevent password reuse count",
"DisplayName:Abp.Identity.Lockout.AllowedForNewUsers": "Enabled for new users",
"DisplayName:Abp.Identity.Lockout.LockoutDuration": "Lockout duration(seconds)",
"DisplayName:Abp.Identity.Lockout.MaxFailedAccessAttempts": "Max failed access attempts",
Expand All @@ -114,6 +117,8 @@
"Description:Abp.Identity.Password.RequireDigit": "If passwords must contain a digit.",
"Description:Abp.Identity.Password.ForceUsersToPeriodicallyChangePassword": "Whether users are forced to periodically change their password.",
"Description:Abp.Identity.Password.PasswordChangePeriodDays": "The number of days a user's password is valid for.",
"Description:Abp.Identity.Password.EnablePreventPasswordReuse": "Whether to prevent users from reusing their previous passwords.",
"Description:Abp.Identity.Password.PreventPasswordReuseCount": "The number of previous passwords that cannot be reused.",
"Description:Abp.Identity.Lockout.AllowedForNewUsers": "Whether a new user can be locked out.",
"Description:Abp.Identity.Lockout.LockoutDuration": "The duration a user is locked out for when a lockout occurs.",
"Description:Abp.Identity.Lockout.MaxFailedAccessAttempts": "The number of failed access attempts allowed before a user is locked out, assuming lock out is enabled.",
Expand Down
Loading
Loading