// // MembershipProvider.CreateUser // public override MembershipUser CreateUser(string username, string password, string email, string passwordQuestion, string passwordAnswer, bool isApproved, object providerUserKey, out MembershipCreateStatus status) { ValidatePasswordEventArgs args = new ValidatePasswordEventArgs(username, password, true); OnValidatingPassword(args); if (args.Cancel) { status = MembershipCreateStatus.InvalidPassword; return null; } if (RequiresUniqueEmail && GetUserNameByEmail(email) != "") { status = MembershipCreateStatus.DuplicateEmail; return null; } MembershipUser u = GetUser(username, false); if (u == null) { DateTime createDate = DateTime.Now; if (providerUserKey == null) { providerUserKey = Guid.NewGuid(); } else { if (!(providerUserKey is Guid)) { status = MembershipCreateStatus.InvalidProviderUserKey; return null; } } User user = new User() { Email = email, // ProviderUserKey = providerUserKey, Username = username, Password = EncodePassword(password), PasswordQuestion = passwordQuestion, PasswordAnswer = EncodePassword(passwordAnswer), IsApproved = isApproved, Comment = "", CreationDate = createDate, LastPasswordChangedDate = createDate, LastActivityDate = createDate, ApplicationName = pApplicationName, IsLockedOut = false, LastLockedOutDate = createDate, FailedPasswordAttemptCount = 0, FailedPasswordAttemptWindowStart = createDate, FailedPasswordAnswerAttemptCount = 0, FailedPasswordAnswerAttemptWindowStart = createDate }; try { _neoClient.Cypher .Create("(user:User {newUser})") .WithParam("newUser", user) .ExecuteWithoutResults(); Node<User> newUser = _neoClient.Cypher .Match("(n:User)") .Where((User n) => (n.Username == username && n.ApplicationName == pApplicationName)) .Return<Node<User>>("n").Results.FirstOrDefault(); if (newUser != null) { // ProviderUserKey must be an int for WebSecurity to work right... // http://aspnetwebstack.codeplex.com/SourceControl/latest#src/WebMatrix.WebData/WebSecurity.cs _neoClient.Update<User>(newUser.Reference, un => { un.ProviderUserKey = newUser.Reference.Id; }); newUser.Data.ProviderUserKey = (int)newUser.Reference.Id; status = MembershipCreateStatus.Success; } else { status = MembershipCreateStatus.ProviderError; } } catch (Exception e) { if (WriteExceptionsToEventLog) { WriteToEventLog(e, "CreateUser"); } status = MembershipCreateStatus.ProviderError; } return GetUser(username, false); } else { status = MembershipCreateStatus.DuplicateUserName; } return null; }
public override string CreateAccount(string userName, string password, bool requireConfirmationToken) { ValidatePasswordEventArgs args = new ValidatePasswordEventArgs(userName, password, true); OnValidatingPassword(args); if (args.Cancel) { return null; } MembershipUser u = GetUser(userName, false); if (u == null) { DateTime createDate = DateTime.Now; Guid provider = Guid.NewGuid(); Guid confirmToke= Guid.NewGuid(); try { User user = new User() { Email = userName, // This must be an Int for WebSecurity GetUserId to work // http://aspnetwebstack.codeplex.com/SourceControl/latest#src/WebMatrix.WebData/WebSecurity.cs // ProviderUserKey = provider, Username = userName, Password = EncodePassword(password), Comment = "", CreationDate = createDate, LastPasswordChangedDate = createDate, LastActivityDate = createDate, ApplicationName = pApplicationName, IsLockedOut = false, IsApproved = true, LastLockedOutDate = createDate, FailedPasswordAttemptCount = 0, FailedPasswordAttemptWindowStart = createDate, FailedPasswordAnswerAttemptCount = 0, FailedPasswordAnswerAttemptWindowStart = createDate, AccountConfirmToken = confirmToke.ToString(), IsConfirmed = requireConfirmationToken }; _neoClient.Cypher .Create("(user:User {newUser})") .WithParam("newUser", user) .ExecuteWithoutResults(); Node<User> newUser = _neoClient.Cypher .Match("(n:User)") .Where((User n) => (n.Username == userName && n.ApplicationName == pApplicationName)) .Return<Node<User>>("n").Results.FirstOrDefault(); if (newUser != null) { // we need to update the provider token... _neoClient.Update<User>(newUser.Reference, un => { un.ProviderUserKey = newUser.Reference.Id; }); return newUser.Data.AccountConfirmToken; } else { return null; } } catch (Exception e) { if (WriteExceptionsToEventLog) { WriteToEventLog(e, "CreateAccount"); } } } return null; }