Skip to content

Commit 6a6978d

Browse files
author
Warren Buckley
committed
Merge pull request #7627 from umbraco/v8/bugfix/AB4828-resetpassword-mail
AB4828 - Reset Password Email (cherry picked from commit f00680b)
1 parent 9c428b7 commit 6a6978d

File tree

2 files changed

+39
-0
lines changed

2 files changed

+39
-0
lines changed

src/Umbraco.Core/Persistence/Repositories/Implement/UserRepository.cs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -557,6 +557,16 @@ protected override void PersistUpdatedItem(IUser entity)
557557
}
558558
}
559559

560+
// If userlogin or the email has changed then need to reset security stamp
561+
if (changedCols.Contains("userLogin") || changedCols.Contains("userEmail"))
562+
{
563+
userDto.EmailConfirmedDate = null;
564+
userDto.SecurityStampToken = entity.SecurityStamp = Guid.NewGuid().ToString();
565+
566+
changedCols.Add("emailConfirmedDate");
567+
changedCols.Add("securityStampToken");
568+
}
569+
560570
//only update the changed cols
561571
if (changedCols.Count > 0)
562572
{

src/Umbraco.Tests/Persistence/Repositories/UserRepositoryTest.cs

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -409,6 +409,35 @@ public void Can_Get_Paged_Results_With_Filter_And_Groups()
409409
}
410410
}
411411

412+
[Test]
413+
public void Can_Invalidate_SecurityStamp_On_Username_Change()
414+
{
415+
// Arrange
416+
var provider = TestObjects.GetScopeProvider(Logger);
417+
using (var scope = provider.CreateScope())
418+
{
419+
var repository = CreateRepository(provider);
420+
var userGroupRepository = CreateUserGroupRepository(provider);
421+
422+
var user = CreateAndCommitUserWithGroup(repository, userGroupRepository);
423+
var originalSecurityStamp = user.SecurityStamp;
424+
425+
// Ensure when user generated a security stamp is present
426+
Assert.That(user.SecurityStamp, Is.Not.Null);
427+
Assert.That(user.SecurityStamp, Is.Not.Empty);
428+
429+
// Update username
430+
user.Username = user.Username + "UPDATED";
431+
repository.Save(user);
432+
433+
// Get the user
434+
var updatedUser = repository.Get(user.Id);
435+
436+
// Ensure the Security Stamp is invalidated & no longer the same
437+
Assert.AreNotEqual(originalSecurityStamp, updatedUser.SecurityStamp);
438+
}
439+
}
440+
412441
private void AssertPropertyValues(IUser updatedItem, IUser originalUser)
413442
{
414443
Assert.That(updatedItem.Id, Is.EqualTo(originalUser.Id));

0 commit comments

Comments
 (0)