是否可以在不使用MembershipUser类的情况下创建自定义MembershipProvider?
我想使用自己的User类并保持整洁,我不想使用MembershipUser类,它具有很多我不想要或不需要的属性。
答案 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自定义你自己的用户,其他属性不会咬你,但缺乏会。