没有MembershipUser的自定义MembershipProvider

时间:2011-09-01 19:23:08

标签: .net asp.net custom-membershipprovider

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

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

4 个答案:

答案 0 :(得分: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;
   }
}

答案 1 :(得分:1)

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

Membership.Provider返回抽象MembershipProvider,其中包含:

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

和其他返回MembershipUser类的方法。

答案 2 :(得分:0)

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

答案 3 :(得分:0)

这是我的解决方案

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。)不需要更多。但我建议通过继承MembershipUser自定义你自己的用户,其他属性不会咬你,但缺乏会。