diff --git a/src/Microsoft.AspNet.Identity/UserManager.cs b/src/Microsoft.AspNet.Identity/UserManager.cs index 65dfccdd09..9a5c3c1a32 100644 --- a/src/Microsoft.AspNet.Identity/UserManager.cs +++ b/src/Microsoft.AspNet.Identity/UserManager.cs @@ -1784,6 +1784,12 @@ namespace Microsoft.AspNet.Identity { throw new ArgumentNullException("user"); } + + if (await GetAccessFailedCountAsync(user) == 0) + { + return IdentityResult.Success; + } + await store.ResetAccessFailedCountAsync(user, CancellationToken); return await LogResultAsync(await UpdateUserAsync(user), user); } diff --git a/test/Microsoft.AspNet.Identity.Test/UserManagerTest.cs b/test/Microsoft.AspNet.Identity.Test/UserManagerTest.cs index b1f95cb7c6..827e5e89e5 100644 --- a/test/Microsoft.AspNet.Identity.Test/UserManagerTest.cs +++ b/test/Microsoft.AspNet.Identity.Test/UserManagerTest.cs @@ -627,6 +627,20 @@ namespace Microsoft.AspNet.Identity.Test BadPasswordValidator.ErrorMessage); } + [Fact] + public async Task ResetTokenCallNoopForTokenValueZero() + { + var user = new IdentityUser() { UserName = Guid.NewGuid().ToString()}; + var store = new Mock>(); + store.Setup(x => x.ResetAccessFailedCountAsync(user, It.IsAny())).Returns(() => + { + throw new Exception(); + }); + var manager = MockHelpers.TestUserManager(store.Object); + + IdentityResultAssert.IsSuccess(await manager.ResetAccessFailedCountAsync(user)); + } + [Fact] public async Task ManagerPublicNullChecks() {