Пользовательский MembershipProvider без MembershipUser
Можно ли создать пользовательский MembershipProvider без использования класса MembershipUser?
Я хотел бы использовать свой собственный класс User и, чтобы сохранить порядок, я не хотел бы использовать класс MembershipUser, который имеет много свойств, которые мне действительно не нужны или не нужны.
4 ответа
Нет, это не так. Но вы всегда можете написать свою собственную абстракцию поверх нее, используя Repository
шаблон или аналогичный, а затем использовать свой собственный User
модель в приложении.
public UserRepository : IUserRepository
{
private MembershipProvider provider;
private UserAdapter userAdapter;
public UserService(MembershipProvider provider, UserAdapter userAdapter)
{
this.provider = provider;
this.userAdapter = userAdapter;
}
public MyUser GetUser(string email)
{
MembershipUser user = provider.GetUser(username, false);
MyUser myUser= userAdapter.Map(user);
return myUser;
}
}
Если вы действительно хотите встроить своего провайдера в инфраструктуру членства ASP.NET, вам следует.
Membership.Provider возвращает абстрактный MembershipProvider, также содержащий:
public abstract MembershipUser CreateUser(..);
public abstract MembershipUser GetUser(..);
и другие методы, возвращающие класс MembershipUser.
Это мое решение
customerUser.cs
public class DZMembership
{
public virtual Guid Id { get; set; }
public virtual string UserName { get; set; }
public virtual string Password { get; set; }
public virtual DateTime TimeCreated { get; set; }
}
customerProvider.cs
public class DZMembershipProvider : MembershipProvider
{
IDALMembership dal = DalFactory.GetDalMembership();
#region override of membership provider
public override string ApplicationName
{
get
{
throw new NotImplementedException();
}
set
{
throw new NotImplementedException();
}
}
public override bool ChangePassword(string username, string oldPassword, string newPassword)
{
DZMembership member = dal.GetMemberByName(username);
string encryptedOldPsw = FormsAuthentication.HashPasswordForStoringInConfigFile(oldPassword, "MD5");
string encryptedNewPsw = FormsAuthentication.HashPasswordForStoringInConfigFile(newPassword, "MD5");
if (member.Password != encryptedOldPsw) return false;
member.Password = encryptedNewPsw;
dal.ChangePassword(member);
return true;
}
public override MembershipUser GetUser(string username, bool userIsOnline)
{
DZMembership user = dal.GetMemberByName(username);
if (user == null) return null;
MembershipUser mu = new MembershipUser("DZMembershipProvider",
username, user.Id, "", "", string.Empty,
true, true, DateTime.Now,
DateTime.Now, DateTime.Now, DateTime.Now, DateTime.Now);
return mu;
}
когда метод должен вернуть тип MembershipUser, создайте новый с информацией о пользователе вашего клиента. в большинстве случаев все будет хорошо. потому что встроенные элементы управления (login, loginstatus.) не требуют больше, чем те. но я предлагаю настроить вашего ownuser, унаследовав MembershipUser, дополнительные свойства не будут кусать вас, но недостаток будет.
Вы можете создать пользовательский поставщик членства без использования / наследования от пользователя членства в зависимости от вашего использования. Если вы не используете встроенный метод createuser (пользователь создается в другой исходной системе), то вам действительно не нужен объект пользователя членства. В противном случае просто создайте еще один объект, который наследуется от membersuser с вашими дополнительными свойствами.