如何在ASP.NET MVC4中扩展SimpleMembership身份验证

时间:2012-10-28 21:22:02

标签: asp.net-mvc-4 simplemembership

我已经完成了几个ASP.NET MVC 1和2站点。不知何故,我设法跳过v3。 我现在正在创建一个新的ASP.NET MVC 4站点,我发现所有会员资料都已完全改变。

起初我很高兴。它看起来很容易设置和使用,Internet项目模板附带了我开始所需的所有类和视图。

不幸的是,我现在完全卡住了。我需要扩展验证用户身份的代码。基本上,我需要根据Web服务和其他用户对本地数据库进行身份验证。两种类型的用户都将配置文件数据存储在本地数据库中。

我的问题是我无法找到任何扩展SimpleMembership的方法。

在旧的Membership provider模型下,我会尝试继承SqlMembership并重写ValidateUser()并调用基类或调用Web服务。

我确实尝试过这样的事情,我在我的项目中创建了一个继承自SimpleMembership的类,然后将其配置为web.config中的默认成员资格提供程序,但这只是给了我错误

Parser Error Message: This method cannot be called during the application's pre-start initialization phase.

Line 32:     <membership defaultProvider="ssund">
Line 33:       <providers>
Line 34:         <add name="ssund" type="Ssund.Web.Providers.SsundSimpleMembershipProvider"/>
Line 35:       </providers>
Line 36:     </membership>

2 个答案:

答案 0 :(得分:3)

SimpleMembership未在web.config中配置,已在InitializeSimpleMembershipAttribute.cs文件中完成。

不幸的是,使用的WebSecurity类的实现无法扩展,它难以编码SimpleMembershipProvider的使用。

您不必使用SimpleMembership。您可以回退使用旧的成员资格提供程序基础结构。

答案 1 :(得分:1)

您可以扩展SimpleMembershipProvider但由于提供程序初始化的不寻常和限制性方式,这不是一种愉快的体验。

尽管通过调用WebSecurity.InitializeDatabaseConnection初始化了提供程序,但通过Web.Config显式设置提供程序同样有效。如果它们从SimpleMembershipProvider延伸,则在初始化期间将正确配置它们。

实际上,您可以实现自己的ExtendedMembershipProvider以用于WebSecurity API,而不是根本调用WebSecurity.InitializeDatabaseConnection(仅适用于基于SimpleMembershipProvider的实现)。缺点是从头开始构建这个是很多工作。

您获得的错误可能是因为您在提供程序的早期与提供程序进行交互,可能是因为您在提供程序的Initialize例程中执行了某些操作。

有关SimpleMembershipProviderMembershipProvider之间差异的详情,请参阅SimpleMembershipProvider vs MembershipProvider。请查看BetterMembership.Net以获取扩展SimpleMembershipProvider

的示例