Я разработал собственный пользовательский поставщик членства и роли. Класс System.Web.Security.Membership вызывает метод CreateUser, который я не реализовал (специально для меня требуется дополнительная информация в моем MemberhipUser).Класс членства вызывает «неправильный» метод для моего настраиваемого поставщика?
Должен ли я использовать класс Membership вообще в этом сценарии?
Теперь я приложу к своему собственному провайдеру членства использовать мой реализованный метод CreateUser, это путь? Я чувствую себя немного потерянным, как мне с этим справиться?
((MyMembershipProviderBase)Membership.Provider).CreateUser(username, password, email, lastName, firstName, phoneNumber, out status);
Провайдер Membership 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...
}
* Редактировать
Respons на @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;
}
}
Спасибо за комментарий! Я не знаю, полностью ли понимаю, как должна быть реализована оболочка, которую вы предлагаете, но я попробовал и обновил свой пост выше. – user579089
Я не использую элемент управления Create Wizard, я начал с нового решения MVC и проработал путь к реализации Провайдеров. Цель состоит в том, чтобы иметь возможность использовать встроенные функции пользователя и роли, но иметь контроль над тем, как и какие пользовательские данные (и роли) хранятся в базе данных. – user579089