Я разработал свой собственный поставщик членства и роли. Класс System.Web.Security.Membership вызывает метод CreateUser, который я не реализовал (специально, мне нужно больше информации в моем MembershipUser).
Должен ли я вообще использовать класс Membership в этом сценарии?
Теперь я приведу тип к своему поставщику членства, чтобы использовать мой реализованный метод CreateUser, это путь? Я чувствую себя немного потерянным, как мне справиться с этим?
((MyMembershipProviderBase)Membership.Provider).CreateUser(username, password, email, lastName, firstName, phoneNumber, out status);
Членство провайдера CreateUser-методы:
public override MembershipUser CreateUser(string username, string password, string email, string passwordQuestion, string passwordAnswer, bool isApproved, object providerUserKey, out MembershipCreateStatus status)
{
throw new NotImplementedException();
}
public MyMembershipUser CreateUser(
string username, string password, string email, string lastName, string firstName,
string phoneNumber, out MembershipCreateStatus status)
{
// implemented...
}
* Edit
Отвечает на комментарий @elkdanger.
Это та оболочка, на которую вы ссылаетесь в своем комментарии?
Теперь класс Membership вызывает стандартный метод CreateUser, который перенаправляет на мою собственную реализацию, проблема в том, что я не могу установить дополнительную информацию для пользователя (имя, фамилия и номер телефона). Это способ пойти и затем обработать установку дополнительной информации откуда-то еще (где я создаю своего пользователя)?
public override MembershipUser CreateUser(string username, string password, string email, string passwordQuestion,
string passwordAnswer, bool isApproved, object providerUserKey, out MembershipCreateStatus status)
{
return this.CreateUser(username, password, email, "", "", "", out status);
}
public MyMembershipUser CreateUser(
string username, string password, string email, string lastName, string firstName,
string phoneNumber, out MembershipCreateStatus status
)
{
var 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)
{
try
{
status = Repository.CreateUser(username, EncodePassword(password), email, lastName, firstName,
phoneNumber);
}
catch
{
status = MembershipCreateStatus.ProviderError;
}
return (MyMembershipUser)GetUser(username, false);
}
else
{
status = MembershipCreateStatus.DuplicateUserName;
return null;
}
}