Я реализовал некоторый базовый пользовательский поставщик членства для своего приложения ASP.NET MVC, поэтому я подумал, что вся проверка будет выполнена в моем пользовательском коде.
К сожалению, когда я пытаюсь создать нового пользователя, вызвав функцию:
Membership.CreateUser(user.UserName, user.Password, user.Email, null, null, true, Guid.NewGuid(), out status);
, что в конечном итоге должно вызвать исключение с всеми ошибками проверки Вместо этого я получаю состояние, подобное «InvalidUserName» или «InvalidPassword» ... Это означает, что моя пользовательская функция CreateUser не вызывается напрямую он используется после некоторой базовой проверки, которую я хотел бы пропустить.
Моя функция CreateUser (в моем пользовательском провайдере):
public override MembershipUser CreateUser(string username, string password, string email, string passwordQuestion, string passwordAnswer, bool isApproved, object providerUserKey, out MembershipCreateStatus status)
{
try
{
User user = new User();
user.UserKey = Guid.NewGuid();
user.UserName = username;
user.passwordSalt = string.Empty;
user.Password = this.TransformPassword(password, ref user.passwordSalt);
user.Email = email;
user.PasswordQuestion = passwordQuestion;
user.PasswordAnswer = passwordAnswer;
user.CreationDate = DateTime.Now;
user.LastActivityDate = DateTime.Now;
user.LastLoginDate = DateTime.MinValue;
user.LastPasswordChangeDate = DateTime.Now;
this._UsersRepository.SaveUser(user);
status = MembershipCreateStatus.Success;
return CreateMembershipFromInternalUser(user);
}
catch(RuleException ex)
{
throw ex;
}
}
Знаете ли вы, как обеспечить прямое использование пользовательской функции CreateUser!?
Но я не использую AccountController проекта ASP.NET MVC по умолчанию ...
Просто взгляните:
[AcceptVerbs(HttpVerbs.Post)]
public ViewResult Register(User user, string password_confirm, bool acceptsTerms)
{
if (!acceptsTerms)
ModelState.AddModelError("acceptsTerms", "Musisz zaakceptować regulamin");
if (ModelState.IsValid)
{
try
{
MembershipCreateStatus status = new MembershipCreateStatus();
Membership.CreateUser(user.UserName, user.Password, user.Email, null, null, true, Guid.NewGuid(), out status);
}
catch (RuleException ex){
ex.CopyToModelState(ModelState,"user");
}
}
return View();
}
Дело в том, что я получаю статус вместо RuleException ex, когда user.UserName или user.Password пусто. Мой пользовательский RuleException ex также вернул бы мне такую информацию. Где значение статуса назначается прямо сейчас!? Bacouse это не сделано в моей реализации CreateUser ...