是否可以在不使用MembershipUser类的情况下创建自定义MembershipProvider?没有MembershipUser的自定义MembershipProvider
我想使用我自己的用户类,并保持整洁,我想不必使用MembershipUser类,它有很多属性,我真的不想要或需要。
是否可以在不使用MembershipUser类的情况下创建自定义MembershipProvider?没有MembershipUser的自定义MembershipProvider
我想使用我自己的用户类,并保持整洁,我想不必使用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;
}
}
您可以创建自定义memembership供应商不使用/从取决于您使用会员用户继承。如果您没有使用内置的createuser方法(该用户是在另一个源系统中创建的),那么您确实不需要成员资格用户对象。否则,只需使用其他属性创建另一个从membershipuser继承的对象。
您是指会员用户?我是说不要继承会员用户而不是提供商。我看到我的措辞可能会有点混乱。我的意思是使用自定义成员资格提供程序,但如果不需要,则不会真正使用成员资格用户对象。 –
如果你真的想在ASP.NET Membership构架中内建你的提供者,你应该。
Membership.Provider返回抽象MembershipProvider还含有:
public abstract MembershipUser CreateUser(..);
public abstract MembershipUser GetUser(..);
等方法返回MembershipUser类。
谢谢,我已经知道如何实现抽象MembershipProvider。我对学习感兴趣的是,如果可以省略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;
}
当方法需要返回一个类型的MembershipUser,建立一个新的与客户用户的信息来源。在大多数情况下,它会没事的。因为内置的控件(login,loginstatus)不需要比这些更多。但我建议通过继承MembershipUser来定制你自己的用户,其他属性不会咬你,但缺乏会。
感谢您的示例。尽管我决定不使用ASP.NET成员资格结构,但您回答我的问题“是否可以在不使用MembershipUser类的情况下创建自定义MembershipProvider?” –
@JohanVauhkonen得到同样的问题,我认为最简单的解决方案是创建我们自己的系统。您可以轻松地重现会员供应商的行为,但需要一点工作。 – Rushino