是否可以创建自定义MembershipProvider而不使用MembershipUser类?
我想使用自己的用户类,并且为了保持整洁,我不想使用MembershipUser类,因为它有很多我真的不需要的属性。
是否可以创建自定义MembershipProvider而不使用MembershipUser类?
我想使用自己的用户类,并且为了保持整洁,我不想使用MembershipUser类,因为它有很多我真的不需要的属性。
不是的。但您可以使用“存储库”模式或类似方法在其上编写自己的抽象,并在应用程序中使用自己的“用户”模型。
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;
}
}
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;
}
如果您的使用情况不需要使用/继承成员资格用户,那么可以创建自定义成员资格提供程序。如果您没有使用内置的createuser方法(用户在另一个源系统中创建),那么您实际上不需要成员资格用户对象。否则,只需创建另一个从membershipuser继承的对象,并添加您需要的额外属性即可。