fixes up the double member creation in the createuser method

This commit is contained in:
Shannon
2014-01-08 16:29:09 +11:00
parent 9467a67661
commit 056b13eb98
4 changed files with 59 additions and 15 deletions

View File

@@ -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.
/// </remarks>
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);
}
/// <summary>
/// Performs the validation of the information for creating a new user
/// </summary>
/// <param name="username"></param>
/// <param name="password"></param>
/// <param name="email"></param>
/// <param name="passwordQuestion"></param>
/// <param name="passwordAnswer"></param>
/// <param name="isApproved"></param>
/// <param name="providerUserKey"></param>
/// <returns></returns>
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;
}
/// <summary>

View File

@@ -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);
}

View File

@@ -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;

View File

@@ -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;
}
/// <summary>
/// Initializes a new instance of the <see cref="User"/> class.
/// </summary>