经过多长时间尝试回答我的问题“我应该编写自定义MembershipProvider实现还是制作我自己的自定义系统?”因此我决定以MembershipProvider的方式开始编写我的会员提供者并不是那么糟糕。但当时我觉得有些麻烦。
例如,在我的系统中没有用户名。电子邮件是用户名。所以CreateUser方法应如下所示:
public override MembershipUser CreateUser(string username, string password, string email, string passwordQuestion, string passwordAnswer, bool isApproved, object providerUserKey, out MembershipCreateStatus status)
{
bool userExists = GetUser(email);
if (userExists) {
status = MembershipCreateStatus.DuplicateEmail;
return null;
}
bool? tryExists = regTryExists(email);
if (tryExists.HasValue && tryExists.Value && !userExists)
{
UserRepository.CreateUser(email, password);
status = MembershipCreateStatus.Success;
return GetUser(email);
}
return null;
}
此外,我不需要GetUserNameByEmail
,FindUsersByName
方法:
public override string GetUserNameByEmail(string email)
{
return email;
}
public override MembershipUserCollection FindUsersByName(string usernameToMatch, int pageIndex, int pageSize, out int totalRecords)
{
throw new NotImplementedException();
}
所以这里我不需要username, passwordQuestion, passwordAnswer, isApproved
个参数。
另外,在我的系统中没有用户问题,所以我不需要像
那样的方法public override bool ChangePasswordQuestionAndAnswer(string username, string password, string newPasswordQuestion, string newPasswordAnswer)
{
return false;
}
public override string ResetPassword(string username, string answer)
{
throw new NotImplementedException();
}
这只是浪费和繁琐的会员制度的一部分。它并不像我想的那么可靠。
所以问题是,使用MembershipProvider真的值得吗?你能带我过来吗? MembershipSystem是否有很好的优势,使其成为真正的价值体系?
答案 0 :(得分:4)
使用MembershipProvider基本上归结为任何开发人员(或开发人员)必须做出的“构建或购买”决策:从头开始构建它,或者购买现成的(或者在这种情况下,使用pre-pre现有工具)。
考虑到这一点......诚然,MembershipProvider并不完美 - 它有点笨重,可能有太多(或太少)你需要的东西 - 但它的85%是大多数实现。正如其他人所提到的那样,从头开始构建自己的身份验证系统并不值得花时间或精力。 这是一个已解决的问题;用你的发展能量来解决更紧急和相关的业务问题,而不是重新发明轮子!
记住这个公理:除非你能从头开发一些东西获得直接的竞争优势,否则你(通常)会更好地使用现有的工具(买,不建)。
答案 1 :(得分:1)
ASP.NET成员资格提供程序API的一些优点:
答案 2 :(得分:0)
好的MembershipProvider确实很有用。完整的ASP.Net安全基础架构围绕它构建。许多控件可以直接与此基础结构进行交互,例如Login,LoginStatus。所以它确实有它的优点。
但由于界面肥胖,它也有相当大的问题。它打破了界面分离原则,因此使用起来有点麻烦。我相信这些优势超过了我们在这里付出的代价。因此,只要有简单的解决方法,使用它就没有任何危害。
建立自己的安全基础设施也不是一项微不足道的任务。
答案 3 :(得分:0)
听起来默认MembershipProvider
可以做你需要做的一切
因此,我肯定会建议创建一个包含UserBusiness
的{{1}}类,并且只公开您使用的功能。
这样可以轻松使用MembershipProvider
的强大功能,同时还可以根据需要简化界面。
答案 4 :(得分:0)
我首先使用自定义提供程序,但现在已完全切换。
我只保留了一个原则,比如何时锁定用户,如何哈希密码等等
我需要自定义提供程序,直到我需要不同数据库的多租户支持。最后一滴是我尝试单元测试使用成员资格提供程序的WCF服务。现在我有会员服务,生活很美好。我仍然有几乎与原始数据结构相同的数据结构,但在.NET中我使用我的代码