是否可以在不使用 MembershipUser 类的情况下创建自定义 MembershipProvider?
我想使用我自己的 User 类并保持整洁,我不想使用 MembershipUser 类,它有很多我真的不想要或不需要的属性。
是否可以在不使用 MembershipUser 类的情况下创建自定义 MembershipProvider?
我想使用我自己的 User 类并保持整洁,我不想使用 MembershipUser 类,它有很多我真的不想要或不需要的属性。
不,这不对。但是您始终可以使用模式或类似方法在其之上编写自己的抽象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 基础结构中内置您的提供程序,那么您应该这样做。
Membership.Provider返回抽象MembershipProvider还包含:
public abstract MembershipUser CreateUser(..);
public abstract MembershipUser GetUser(..);
和其他返回MembershipUser类的方法。
根据您的使用情况,您可以在不使用/继承会员用户的情况下创建自定义会员资格提供程序。如果您没有使用内置的 createuser 方法(用户是在另一个源系统中创建的),那么您真的不需要成员资格用户对象。否则,只需使用您的额外属性创建另一个从membershipuser 继承的对象。
这是我的解决方案
客户用户.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 自定义您自己的用户,附加属性不会咬你,但缺乏会。