Пользовательский MembershipProvider без MembershipUser - PullRequest
3 голосов
/ 01 сентября 2011

Можно ли создать пользовательский MembershipProvider без использования класса MembershipUser?

Я хотел бы использовать свой собственный класс User и, чтобы сохранить порядок, я не хотел бы использовать класс MembershipUser, который имеет множество свойств, которые мне действительно не нужны или не нужны.

Ответы [ 4 ]

4 голосов
/ 01 сентября 2011

Нет, это не так.Но вы всегда можете написать собственную абстракцию поверх нее, используя шаблон 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;
   }
}
1 голос
/ 01 сентября 2011

Если вы действительно хотите встроить своего провайдера в инфраструктуру членства ASP.NET, вам следует.

Membership.Provider возвращает реферат MembershipProvider , также содержащий:

public abstract MembershipUser CreateUser(..);
public abstract MembershipUser GetUser(..);

и другие методы, возвращающие MembershipUser class.

0 голосов
/ 28 мая 2015

это моё решение

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, дополнительные свойства не будут кусать вас, но недостаток будет.

0 голосов
/ 01 сентября 2011

Вы можете создать пользовательский поставщик членства без использования / наследования от пользователя членства в зависимости от вашего использования.Если вы не используете встроенный метод createuser (пользователь создается в другой исходной системе), то вам действительно не нужен объект пользователя членства.В противном случае просто создайте еще один объект, который наследуется от membersuser с вашими дополнительными свойствами.

...