diff --git a/src/Umbraco.Core/Services/MemberService.cs b/src/Umbraco.Core/Services/MemberService.cs
index 22684f36ba..494a8bc376 100644
--- a/src/Umbraco.Core/Services/MemberService.cs
+++ b/src/Umbraco.Core/Services/MemberService.cs
@@ -986,7 +986,11 @@ namespace Umbraco.Core.Services
/// Optional parameter to raise events.
/// Default is True otherwise set to False to not raise events
public void Save(IMember entity, bool raiseEvents = true)
- {
+ {
+ //trimming username and email to make sure we have no trailing space
+ entity.Username = entity.Username.Trim();
+ entity.Email = entity.Email.Trim();
+
using (var uow = UowProvider.GetUnitOfWork())
{
var saveEventArgs = new SaveEventArgs(entity);
diff --git a/src/Umbraco.Web.UI.Client/src/common/services/umbdataformatter.service.js b/src/Umbraco.Web.UI.Client/src/common/services/umbdataformatter.service.js
index 5fc2416927..2edd8e709a 100644
--- a/src/Umbraco.Web.UI.Client/src/common/services/umbdataformatter.service.js
+++ b/src/Umbraco.Web.UI.Client/src/common/services/umbdataformatter.service.js
@@ -243,7 +243,7 @@
return item.alias === "_umb_membergroup";
});
saveModel.email = propEmail.value;
- saveModel.username = propLogin.value;
+ saveModel.username = propLogin.value.trim();
saveModel.password = this.formatChangePasswordModel(propPass.value);
diff --git a/src/Umbraco.Web/Editors/MemberController.cs b/src/Umbraco.Web/Editors/MemberController.cs
index 888d097bf4..5e246c0d59 100644
--- a/src/Umbraco.Web/Editors/MemberController.cs
+++ b/src/Umbraco.Web/Editors/MemberController.cs
@@ -393,7 +393,7 @@ namespace Umbraco.Web.Editors
UpdateName(contentItem);
//map the custom properties - this will already be set for new entities in our member binder
- contentItem.PersistedContent.Email = contentItem.Email;
+ contentItem.PersistedContent.Email = contentItem.Email;
contentItem.PersistedContent.Username = contentItem.Username;
//use the base method to map the rest of the properties