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");
}
///