diff --git a/src/Umbraco.Web/Controllers/UmbProfileController.cs b/src/Umbraco.Web/Controllers/UmbProfileController.cs
index 564a56c0d4..f84a5cfbac 100644
--- a/src/Umbraco.Web/Controllers/UmbProfileController.cs
+++ b/src/Umbraco.Web/Controllers/UmbProfileController.cs
@@ -25,38 +25,7 @@ namespace Umbraco.Web.Controllers
return CurrentUmbracoPage();
}
- if (Members.IsLoggedIn() == false)
- {
- throw new NotSupportedException("No member is currently logged in");
- }
-
- var member = Services.MemberService.GetByUsername(HttpContext.User.Identity.Name);
- if (member == null)
- {
- //this should never happen
- throw new InvalidOperationException("No member found with username: " + HttpContext.User.Identity.Name);
- }
-
- if (model.Name != null)
- {
- member.Name = model.Name;
- }
- member.Email = model.Email;
- member.Username = model.Email;
- if (model.MemberProperties != null)
- {
- //TODO: Shouldn't we ensure that none of these properties are flagged as non-editable to the member??
- foreach (var property in model.MemberProperties.Where(p => p.Value != null))
- {
- if (member.Properties.Contains(property.Alias))
- {
- member.Properties[property.Alias].Value = property.Value;
- }
- }
- }
- Services.MemberService.Save(member);
- //reset the FormsAuth cookie since the username might have changed
- FormsAuthentication.SetAuthCookie(member.Username, true);
+ Members.UpdateMemberProfile(model);
//TODO: Why are we redirecting to home again here??
return Redirect("/");
diff --git a/src/Umbraco.Web/Security/MembershipHelper.cs b/src/Umbraco.Web/Security/MembershipHelper.cs
index 126c3ea8cf..24acddaaba 100644
--- a/src/Umbraco.Web/Security/MembershipHelper.cs
+++ b/src/Umbraco.Web/Security/MembershipHelper.cs
@@ -47,6 +47,47 @@ namespace Umbraco.Web.Security
return Membership.Provider.IsUmbracoMembershipProvider();
}
+ ///
+ /// Updates the currently logged in members profile
+ ///
+ ///
+ public void UpdateMemberProfile(ProfileModel model)
+ {
+ if (IsLoggedIn() == false)
+ {
+ throw new NotSupportedException("No member is currently logged in");
+ }
+
+ var member = GetCurrentMember();
+
+ if (model.Name != null)
+ {
+ member.Name = model.Name;
+ }
+ member.Email = model.Email;
+ member.Username = model.Email;
+
+ if (model.MemberProperties != null)
+ {
+ foreach (var property in model.MemberProperties
+ //ensure the property they are posting exists
+ .Where(p => member.ContentType.PropertyTypeExists(p.Alias))
+ .Where(property => member.Properties.Contains(property.Alias))
+ //needs to be editable
+ .Where(p => member.ContentType.MemberCanEditProperty(p.Alias))
+ //needs to have a value
+ .Where(p => p.Value != null))
+ {
+ member.Properties[property.Alias].Value = property.Value;
+ }
+ }
+
+ _applicationContext.Services.MemberService.Save(member);
+
+ //reset the FormsAuth cookie since the username might have changed
+ FormsAuthentication.SetAuthCookie(member.Username, true);
+ }
+
///
/// Registers a new member
///