3

是否可以在不使用 MembershipUser 类的情况下创建自定义 MembershipProvider?

我想使用我自己的 User 类并保持整洁,我不想使用 MembershipUser 类,它有很多我真的不想要或不需要的属性。

4

4 回答 4

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;
   }
}
于 2011-09-01T19:26:03.940 回答
1

如果您真的想在 ASP.NET Membership 基础结构中内置您的提供程序,那么您应该这样做。

Membership.Provider返回抽象MembershipProvider还包含:

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

和其他返回MembershipUser类的方法。

于 2011-09-01T19:30:43.043 回答
0

根据您的使用情况,您可以在不使用/继承会员用户的情况下创建自定义会员资格提供程序。如果您没有使用内置的 createuser 方法(用户是在另一个源系统中创建的),那么您真的不需要成员资格用户对象。否则,只需使用您的额外属性创建另一个从membershipuser 继承的对象。

于 2011-09-01T19:28:35.827 回答
0

这是我的解决方案

客户用户.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 类型时,请使用您的客户用户信息构建一个新类型。在大多数情况下,它会没事的。因为内置的 Controls(login, loginstatus.) 不需要更多。但我建议通过继承 MembershipUser 自定义您自己的用户,附加属性不会咬你,但缺乏会。

于 2015-05-28T09:52:19.207 回答