自定义会员在.Net中有什么好处?

时间:2011-07-21 17:44:16

标签: .net asp.net asp.net-membership forms-authentication roleprovider

我正在建立.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

3 个答案:

答案 0 :(得分:3)

如果你想知道为什么你必须从框架的基类继承;也许你可以查看documentation。具体来说,它表示您必须继承已经继承ProviderBase的抽象类MembershipProvider。因此,与所有抽象类一样,它必须为常用功能提供一些实现(最有可能配置到配置文件中)。

滚动自己的主要好处是改变框架实现的行为(例如,连接到现有的数据库模式)。这样做可以使您使用Membership控件 - 包括Login,LoginView,CreateUserWizard,ChangePassword等。

答案 1 :(得分:1)

如果您已经在创建自定义内容,那么您可能知道自己为什么要这样做。

如果您在注册中需要其他字段,则可以构建自定义字段。通常,当您创建自定义成员资格提供程序时,该提供程序使用与标准提供程序使用的预定义表分开的自定义SQL Server表。

答案 2 :(得分:1)

有一段时间我用它,有一天醒来......这种遗产有什么好处?

答案是我在我的场景中得到了没有收获。从今天开始,我不再使用会员资格,我创建了一个表格结构和我发现最适合我的现实的课程。我并不后悔。

总体会员资格是为了避免重新发明轮子...这些人仍然认为它是稳定的并且已经工作了数年。任何没有带来同样保证的解决方案。 E大多数来自使用Membership的webforms,继续在MVC中使用相同的内容。

我的观点是,你没有通过这种继承赢得任何东西。实际上,就像你会使用给定的接口,因为它需要实现所有的代码!除非使用带有登录控件的Web窗体控件,否则如果我有一个成员类,我就不需要编码,但MVC是我没有控件的情况。

无论如何,我不得不说是这个。我从来没有使用自定义成员资格(继承)会更好的情况! FormsAuthentication 类, RoleProvider 类和我的自定义身份验证类可以使用身份验证和授权。