【发布时间】:2010-01-10 21:25:58
【问题描述】:
我已经为我的 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 函数吗!?
但我没有使用默认的 ASP.NET MVC 项目的 AccountController...
看看吧:
[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();
}
关键是当 user.UserName 或 user.Password 为空时,我得到一个状态而不是 RuleException ex。我的自定义 RuleException ex 也会给我这些信息。现在在哪里分配状态值!? Bacouse 它没有在我的 CreateUser 实现中完成......
【问题讨论】:
标签: asp.net-mvc asp.net-membership