我正在建立.net的自定义会员资格,我不明白它们的真正好处,有什么好处?这是我的类继承自 MembershipProvider :
public class MembershipService : MembershipProvider
{
public override bool ValidateUser(string username, string password)
{
Credencial credencial = context.Credencial.Where(x => x.Usuario == username).FirstOrDefault();
if (credencial == null) return false;
if (credencial.Senha == password)
{
return true;
}
return false;
}
}
这是我在 web.config 中的配置:
<membership defaultProvider="MembershipService" userIsOnlineTimeWindow="15">
<providers>
<clear />
<add
name="MembershipService"
type="Questiona2011.Services.MembershipService" />
</providers>
</membership>
这是我使用它们的地方:
[HttpPost]
public ActionResult Index(IndexViewModel indexViewModel)
{
if (ModelState.IsValid)
{
if (MembershipService.ValidateUser(indexViewModel.Usuario, indexViewModel.Senha))
{
FormsAuthenticationService.SignIn(indexViewModel.Usuario, false);
return RedirectToAction("Index", "Default");
}
}
return View();
}
我不明白,此类 MembershipService 我不需要继承 MembershipProvider 。
使用继承自 MembershipProvider 的自定义成员资格的真正好处是什么?
为什么我需要继承 MembershipProvider ?
答案 0 :(得分:3)
如果你想知道为什么你必须从框架的基类继承;也许你可以查看documentation。具体来说,它表示您必须继承已经继承ProviderBase的抽象类MembershipProvider。因此,与所有抽象类一样,它必须为常用功能提供一些实现(最有可能配置到配置文件中)。
滚动自己的主要好处是改变框架实现的行为(例如,连接到现有的数据库模式)。这样做可以使您使用Membership控件 - 包括Login,LoginView,CreateUserWizard,ChangePassword等。
答案 1 :(得分:1)
如果您已经在创建自定义内容,那么您可能知道自己为什么要这样做。
如果您在注册中需要其他字段,则可以构建自定义字段。通常,当您创建自定义成员资格提供程序时,该提供程序使用与标准提供程序使用的预定义表分开的自定义SQL Server表。
答案 2 :(得分:1)
有一段时间我用它,有一天醒来......这种遗产有什么好处?
答案是我在我的场景中得到了没有收获。从今天开始,我不再使用会员资格,我创建了一个表格结构和我发现最适合我的现实的课程。我并不后悔。
总体会员资格是为了避免重新发明轮子...这些人仍然认为它是稳定的并且已经工作了数年。任何没有带来同样保证的解决方案。 E大多数来自使用Membership的webforms,继续在MVC中使用相同的内容。
我的观点是,你没有通过这种继承赢得任何东西。实际上,就像你会使用给定的接口,因为它需要实现所有的代码!除非使用带有登录控件的Web窗体控件,否则如果我有一个成员类,我就不需要编码,但MVC是我没有控件的情况。
无论如何,我不得不说是这个。我从来没有使用自定义成员资格(继承)会更好的情况! FormsAuthentication 类, RoleProvider 类和我的自定义身份验证类可以使用身份验证和授权。