我爲我的ASP.NET MVC應用程序實現了一些基本的自定義成員資格提供程序,所以我認爲所有的驗證都將在我的自定義代碼中完成。ASP.NET MVC自定義成員資格提供程序「CreateUser」
不幸的是,當我試圖通過調用函數來創建新的用戶:
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的...
好的,謝謝你...... – Kotu 2010-01-10 22:28:53