J'ai implémenté un fournisseur d'appartenances de base personnalisé pour mon application ASP.NET MVC. J'ai donc pensé que toute la validation serait effectuée dans mon code personnalisé.Fournisseur d'appartenances ASP.NET MVC "CreateUser"
Malheureusement quand je suis en train de créer un nouvel utilisateur en appelant la fonction:
Membership.CreateUser(user.UserName, user.Password, user.Email, null, null, true, Guid.NewGuid(), out status);
qui devrait éventuellement lancer une exception avec toutes les erreurs de validation Je reçois un statut comme « InvalidUserName » ou « InvalidPassword "à la place ... Cela signifie que ma fonction CreateUser personnalisée n'est pas appelée directement, elle est utilisée après une validation de base que je souhaiterais passer.
Ma fonction CreateUser (dans mon fournisseur personnalisé):
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;
}
}
Savez-vous comment faire respecter l'utilisation directe de la fonction CreateUser personnalisé!
Mais je ne suis pas l'aide d'un défaut de AccountController de projet ASP.NET MVC ...
Il suffit de prendre un coup d'oeil:
[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();
}
Le point est que je reçois un statut au lieu de RuleException ex lorsque user.UserName ou user.Password est vide. Mon RuleException ex personnalisé me donnerait aussi ces informations. Où une valeur de statut est assignée maintenant!? Bacouse cela ne se fait pas dans ma mise en œuvre de CreateUser ...
Ok, merci ... – Kotu