@@ -2067,7 +2067,12 @@ public virtual async Task<bool> IsLockedOutAsync(TUser user)
20672067 return false ;
20682068 }
20692069 var lockoutTime = await store . GetLockoutEndDateAsync ( user , CancellationToken ) . ConfigureAwait ( false ) ;
2070- return lockoutTime >= DateTimeOffset . UtcNow ;
2070+ #if NET8_0_OR_GREATER
2071+ var utcNow = UtcNow ( ) ;
2072+ #else
2073+ var utcNow = DateTimeOffset . UtcNow ;
2074+ #endif
2075+ return lockoutTime >= utcNow ;
20712076 }
20722077
20732078 /// <summary>
@@ -2186,7 +2191,12 @@ public virtual async Task<IdentityResult> AccessFailedAsync(TUser user)
21862191 return await UpdateUserAndRecordMetricAsync ( user , UserUpdateType . AccessFailed ) . ConfigureAwait ( false ) ;
21872192 }
21882193 Logger . LogDebug ( LoggerEventIds . UserLockedOut , "User is locked out." ) ;
2189- await store . SetLockoutEndDateAsync ( user , DateTimeOffset . UtcNow . Add ( Options . Lockout . DefaultLockoutTimeSpan ) ,
2194+ #if NET8_0_OR_GREATER
2195+ var utcNow = UtcNow ( ) ;
2196+ #else
2197+ var utcNow = DateTimeOffset . UtcNow ;
2198+ #endif
2199+ await store . SetLockoutEndDateAsync ( user , utcNow . Add ( Options . Lockout . DefaultLockoutTimeSpan ) ,
21902200 CancellationToken ) . ConfigureAwait ( false ) ;
21912201 await store . ResetAccessFailedCountAsync ( user , CancellationToken ) . ConfigureAwait ( false ) ;
21922202 return await UpdateUserAndRecordMetricAsync ( user , UserUpdateType . AccessFailed ) . ConfigureAwait ( false ) ;
@@ -2679,6 +2689,14 @@ protected virtual void Dispose(bool disposing)
26792689 }
26802690 }
26812691
2692+ #if NET8_0_OR_GREATER
2693+ private DateTimeOffset UtcNow ( )
2694+ {
2695+ var timeProvider = ServiceProvider . GetService < TimeProvider > ( ) ;
2696+ return timeProvider ? . GetUtcNow ( ) ?? DateTimeOffset . UtcNow ;
2697+ }
2698+ #endif
2699+
26822700 private IUserTwoFactorStore < TUser > GetUserTwoFactorStore ( )
26832701 {
26842702 var cast = Store as IUserTwoFactorStore < TUser > ;
0 commit comments