【问题标题】:What's the benefits of Custom Membership in .Net?.Net 中的自定义会员资格有什么好处?
【发布时间】:2011-07-21 17:44:15
【问题描述】:

我正在.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 继承?

【问题讨论】:

  • 我不明白你的问题。在代码中,您的MembershipService 显然继承自MembershipProvider。您是在问为什么不必在 web.config 中指出继承?
  • @Anders Abel 我在问为什么我需要从 MembershipProvider 继承?
  • 如果您要将自己的成员资格完全脱离 .NET 成员资格,则不必从 MembershipProvider 继承。但请记住一件事,.NET Membership Provider 类可能会为您提供比您自己滚动的任何东西更多的保护,除非您要投入大量时间。 .NET Membership Provider 库投入了大量时间、精力和测试。与尝试推出自己的会员资格相比,您最好选择 .NET 库。
  • @Scott-Lance 您能否介绍一些有关自定义会员资格为我提供的保护、安全性(授权和身份验证)的示例?

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


【解决方案1】:

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

滚动自己的主要好处是改变框架实现的行为(例如,连接到现有的数据库架构)。这样做使您能够使用成员资格控件 - 包括 Login、LoginView、CreateUserWizard、ChangePassword 等。

【讨论】:

  • 我的应用程序在没有MembershipProvider继承的情况下正常工作,为什么需要它们?
  • 我没有会员控制,我使用的是 MVC 3。
【解决方案2】:

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

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

【讨论】:

  • 是的,我正在使用自定义 Sql Server 表。但是为什么我需要从 MembershipProvider 继承呢?
  • 您继承了某些东西,因为您想使用会员提供者中的现有事物,并且您将更改附加到现有事物。如果您要使用自己的表单和表格,而没有从会员资格继承的任何内容。
  • 会员资格对我有什么好处?
【解决方案3】:

我用了一段时间,有一天醒来..这个继承有什么好处?

答案是我在我的场景中没有任何收获。从今天开始,我不再使用 Membership,我创建了一个我认为最适合我的现实的表结构和类。而且我不后悔。

表示整体会员资格是为了避免重新发明轮子......这些家伙仍然认为它是稳定的并且已经工作了多年。任何不能提供同样保证的解决方案。 E 作为绝大多数来自使用 Membership 的网络表单,在 MVC 中继续使用相同的。

我的看法是,你不会用这种继承权赢得任何东西。实际上,这就像您将使用给定的接口一样,因为它需要实现所有代码!除非将 Web 窗体控件与登录控件一起使用,如果我有成员资格类,则无需编写代码,但 MVC 是我没有控件的场景。

不管怎样,我不得不说的是这个。我从来没有遇到过使用自定义成员资格(带有继承)会更好的情况! FormsAuthentication 类、RoleProvider 类和我的自定义 Authentication 类完成身份验证和授权工作。

【讨论】:

  • 真的吗?您如何存储用户密码?在 web.config 中使用 的基于 URL 的授权怎么样?网站管理工具 (WAT) 怎么样?我喜欢其他人编写了所有代码,并为我彻底测试了它。而且我可以在大约 2 分钟内启动并运行标准 SQL 成员资格提供程序,包括角色和配置文件,以及运行良好的架构。
  • @saille 我的问题是关于 Custom MembershipProvider,而不是 SqlMembershipProvider。使用 的基于 URL 的授权是 FormsAuthentication,我通常在没有成员资格的情况下使用它。
猜你喜欢
  • 1970-01-01
  • 2011-05-14
  • 2012-01-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多