diff --git a/src/Umbraco.Core/Security/BackOfficeUserManager.cs b/src/Umbraco.Core/Security/BackOfficeUserManager.cs index cf6e9a737b..dfe59e1783 100644 --- a/src/Umbraco.Core/Security/BackOfficeUserManager.cs +++ b/src/Umbraco.Core/Security/BackOfficeUserManager.cs @@ -201,12 +201,17 @@ namespace Umbraco.Core.Security /// public async override Task CheckPasswordAsync(T user, string password) { - if (BackOfficeUserPasswordChecker == null) + if (BackOfficeUserPasswordChecker != null) { - //use the default behavior - return await base.CheckPasswordAsync(user, password); + var result = await BackOfficeUserPasswordChecker.CheckPasswordAsync(user, password); + //if the result indicates to not fallback to the default, then return true if the credentials are valid + if (result != BackOfficeUserPasswordCheckerResult.FallbackToDefaultChecker) + { + return result == BackOfficeUserPasswordCheckerResult.ValidCredentials; + } } - return await BackOfficeUserPasswordChecker.CheckPasswordAsync(user, password); + //use the default behavior + return await base.CheckPasswordAsync(user, password); } /// diff --git a/src/Umbraco.Core/Security/BackOfficeUserPasswordCheckerResult.cs b/src/Umbraco.Core/Security/BackOfficeUserPasswordCheckerResult.cs new file mode 100644 index 0000000000..8ce843856a --- /dev/null +++ b/src/Umbraco.Core/Security/BackOfficeUserPasswordCheckerResult.cs @@ -0,0 +1,12 @@ +namespace Umbraco.Core.Security +{ + /// + /// The result returned from the IBackOfficeUserPasswordChecker + /// + public enum BackOfficeUserPasswordCheckerResult + { + ValidCredentials, + InvalidCredentials, + FallbackToDefaultChecker + } +} \ No newline at end of file diff --git a/src/Umbraco.Core/Security/IBackOfficeUserPasswordChecker.cs b/src/Umbraco.Core/Security/IBackOfficeUserPasswordChecker.cs index bd9abcdee2..6ee65e0fef 100644 --- a/src/Umbraco.Core/Security/IBackOfficeUserPasswordChecker.cs +++ b/src/Umbraco.Core/Security/IBackOfficeUserPasswordChecker.cs @@ -9,6 +9,6 @@ namespace Umbraco.Core.Security /// public interface IBackOfficeUserPasswordChecker { - Task CheckPasswordAsync(BackOfficeIdentityUser user, string password); + Task CheckPasswordAsync(BackOfficeIdentityUser user, string password); } } \ No newline at end of file diff --git a/src/Umbraco.Core/Umbraco.Core.csproj b/src/Umbraco.Core/Umbraco.Core.csproj index 54c7c44ff5..2f52df5629 100644 --- a/src/Umbraco.Core/Umbraco.Core.csproj +++ b/src/Umbraco.Core/Umbraco.Core.csproj @@ -462,6 +462,7 @@ +