diff --git a/src/Umbraco.Core/Security/MembershipProviderBase.cs b/src/Umbraco.Core/Security/MembershipProviderBase.cs
index 71fb729b78..a9475b526f 100644
--- a/src/Umbraco.Core/Security/MembershipProviderBase.cs
+++ b/src/Umbraco.Core/Security/MembershipProviderBase.cs
@@ -389,52 +389,69 @@ namespace Umbraco.Core.Security
/// Ensures the ValidatingPassword event is executed before executing PerformCreateUser and performs basic membership provider validation of values.
///
public sealed override MembershipUser CreateUser(string username, string password, string email, string passwordQuestion, string passwordAnswer, bool isApproved, object providerUserKey, out MembershipCreateStatus status)
+ {
+ var valStatus = ValidateNewUser(username, password, email, passwordQuestion, passwordAnswer, isApproved, providerUserKey);
+ if (valStatus != MembershipCreateStatus.Success)
+ {
+ status = valStatus;
+ return null;
+ }
+
+ return PerformCreateUser(username, password, email, passwordQuestion, passwordAnswer, isApproved, providerUserKey, out status);
+ }
+
+ ///
+ /// Performs the validation of the information for creating a new user
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ protected MembershipCreateStatus ValidateNewUser(string username, string password, string email, string passwordQuestion, string passwordAnswer, bool isApproved, object providerUserKey)
{
var args = new ValidatePasswordEventArgs(username, password, true);
OnValidatingPassword(args);
if (args.Cancel)
{
- status = MembershipCreateStatus.InvalidPassword;
- return null;
+ return MembershipCreateStatus.InvalidPassword;
}
// Validate password
var passwordValidAttempt = IsPasswordValid(password, MinRequiredNonAlphanumericCharacters, PasswordStrengthRegularExpression, MinRequiredPasswordLength);
if (passwordValidAttempt.Success == false)
{
- status = MembershipCreateStatus.InvalidPassword;
- return null;
+ return MembershipCreateStatus.InvalidPassword;
}
// Validate email
if (IsEmailValid(email) == false)
{
- status = MembershipCreateStatus.InvalidEmail;
- return null;
+ return MembershipCreateStatus.InvalidEmail;
}
// Make sure username isn't all whitespace
if (string.IsNullOrWhiteSpace(username.Trim()))
{
- status = MembershipCreateStatus.InvalidUserName;
- return null;
+ return MembershipCreateStatus.InvalidUserName;
}
// Check password question
if (string.IsNullOrWhiteSpace(passwordQuestion) && RequiresQuestionAndAnswer)
{
- status = MembershipCreateStatus.InvalidQuestion;
- return null;
+ return MembershipCreateStatus.InvalidQuestion;
}
// Check password answer
if (string.IsNullOrWhiteSpace(passwordAnswer) && RequiresQuestionAndAnswer)
{
- status = MembershipCreateStatus.InvalidAnswer;
- return null;
+ return MembershipCreateStatus.InvalidAnswer;
}
- return PerformCreateUser(username, password, email, passwordQuestion, passwordAnswer, isApproved, providerUserKey, out status);
+ return MembershipCreateStatus.Success;
}
///
diff --git a/src/Umbraco.Core/Security/UmbracoMembershipProviderBase.cs b/src/Umbraco.Core/Security/UmbracoMembershipProviderBase.cs
index 2b0b128b1c..6cbd12f448 100644
--- a/src/Umbraco.Core/Security/UmbracoMembershipProviderBase.cs
+++ b/src/Umbraco.Core/Security/UmbracoMembershipProviderBase.cs
@@ -48,8 +48,13 @@ namespace Umbraco.Core.Security
public MembershipUser CreateUser(string memberTypeAlias, string username, string password, string email, string passwordQuestion, string passwordAnswer, bool isApproved, object providerUserKey, out MembershipCreateStatus status)
{
//do the base validation first
- base.CreateUser(username, password, email, passwordQuestion, passwordAnswer, isApproved, providerUserKey, out status);
-
+ var valStatus = ValidateNewUser(username, password, email, passwordQuestion, passwordAnswer, isApproved, providerUserKey);
+ if (valStatus != MembershipCreateStatus.Success)
+ {
+ status = valStatus;
+ return null;
+ }
+
return PerformCreateUser(memberTypeAlias, username, password, email, passwordQuestion, passwordAnswer, isApproved, providerUserKey, out status);
}
diff --git a/src/Umbraco.Core/Services/MemberService.cs b/src/Umbraco.Core/Services/MemberService.cs
index 83a1bfc050..d82a429662 100644
--- a/src/Umbraco.Core/Services/MemberService.cs
+++ b/src/Umbraco.Core/Services/MemberService.cs
@@ -546,6 +546,10 @@ namespace Umbraco.Core.Services
{
repository.AddOrUpdate(member);
uow.Commit();
+
+ //insert the xml
+ var xml = member.ToXml();
+ CreateAndSaveMemberXml(xml, member.Id, uow.Database);
}
return member;
diff --git a/src/umbraco.businesslogic/User.cs b/src/umbraco.businesslogic/User.cs
index ab2f6b110c..e2dd21d104 100644
--- a/src/umbraco.businesslogic/User.cs
+++ b/src/umbraco.businesslogic/User.cs
@@ -4,6 +4,7 @@ using System.Web.Caching;
using Umbraco.Core;
using Umbraco.Core.Cache;
using Umbraco.Core.Logging;
+using Umbraco.Core.Models.Membership;
using Umbraco.Core.Models.Rdbms;
using umbraco.DataLayer;
using System.Collections.Generic;
@@ -39,6 +40,23 @@ namespace umbraco.BusinessLogic
get { return Application.SqlHelper; }
}
+ internal User(IUser user)
+ {
+ _id = (int)user.Id;
+ _userNoConsole = user.IsLockedOut;
+ _userDisabled = user.IsApproved;
+ _name = user.Name;
+ _loginname = user.Username;
+ _email = user.Email;
+ _language = user.Language;
+ _startnodeid = user.StartContentId;
+ _startmediaid = user.StartMediaId;
+ //this is cached, so should be 'ok'
+ _usertype = UserType.GetUserType(user.UserType.Id);
+
+ _isInitialized = true;
+ }
+
///
/// Initializes a new instance of the class.
///