diff --git a/src/Umbraco.Core/Persistence/Repositories/MemberRepository.cs b/src/Umbraco.Core/Persistence/Repositories/MemberRepository.cs index 9fa1c37676..c999d84243 100644 --- a/src/Umbraco.Core/Persistence/Repositories/MemberRepository.cs +++ b/src/Umbraco.Core/Persistence/Repositories/MemberRepository.cs @@ -321,9 +321,9 @@ namespace Umbraco.Core.Persistence.Repositories changedCols.Add("LoginName"); } // DO NOT update the password if it is null or empty - if (dirtyEntity.IsPropertyDirty("Password") && entity.RawPasswordValue.IsNullOrWhiteSpace() == false) + if (dirtyEntity.IsPropertyDirty("RawPasswordValue") && entity.RawPasswordValue.IsNullOrWhiteSpace() == false) { - changedCols.Add("Password"); + changedCols.Add("RawPasswordValue"); } //only update the changed cols if (changedCols.Count > 0) diff --git a/src/Umbraco.Core/Services/IMemberService.cs b/src/Umbraco.Core/Services/IMemberService.cs index 37d568f599..78e7942701 100644 --- a/src/Umbraco.Core/Services/IMemberService.cs +++ b/src/Umbraco.Core/Services/IMemberService.cs @@ -13,11 +13,12 @@ namespace Umbraco.Core.Services /// /// This is simply a helper method which essentially just wraps the MembershipProvider's ChangePassword method /// + /// The member to save the password for /// /// /// This method exists so that Umbraco developers can use one entry point to create/update members if they choose to. /// - void SavePassword(string password); + void SavePassword(IMember member, string password); /// /// Checks if a member with the id exists diff --git a/src/Umbraco.Core/Services/MemberService.cs b/src/Umbraco.Core/Services/MemberService.cs index d1ff012e58..d95f4f37e5 100644 --- a/src/Umbraco.Core/Services/MemberService.cs +++ b/src/Umbraco.Core/Services/MemberService.cs @@ -7,6 +7,7 @@ using System.Xml.Linq; using Umbraco.Core.Auditing; using Umbraco.Core.Events; using Umbraco.Core.Models; +using Umbraco.Core.Models.EntityBase; using Umbraco.Core.Models.Membership; using Umbraco.Core.Models.Rdbms; using Umbraco.Core.Persistence; @@ -15,6 +16,7 @@ using Umbraco.Core.Persistence.Repositories; using Umbraco.Core.Persistence.SqlSyntax; using Umbraco.Core.Persistence.UnitOfWork; using System.Linq; +using Umbraco.Core.Security; namespace Umbraco.Core.Services { @@ -91,13 +93,32 @@ namespace Umbraco.Core.Services /// /// This is simply a helper method which essentially just wraps the MembershipProvider's ChangePassword method /// + /// The member to save the password for /// /// /// This method exists so that Umbraco developers can use one entry point to create/update members if they choose to. /// - public void SavePassword(string password) + public void SavePassword(IMember member, string password) { - + if (member == null) throw new ArgumentNullException("member"); + + var provider = MembershipProviderExtensions.GetMembersMembershipProvider(); + if (provider.IsUmbracoMembershipProvider()) + { + provider.ChangePassword(member.Username, "", password); + } + + //go re-fetch the member and update the properties that may have changed + var result = GetByUsername(member.Username); + if (result != null) + { + //should never be null but it could have been deleted by another thread. + member.RawPasswordValue = result.RawPasswordValue; + member.LastPasswordChangeDate = result.LastPasswordChangeDate; + member.UpdateDate = member.UpdateDate; + } + + throw new NotSupportedException("When using a non-Umbraco membership provider you must change the member password by using the MembershipProvider.ChangePassword method"); } ///