如果您配置了多个成员资格提供程序,例如:
<membership defaultProvider="UmbracoMembershipProvider" userIsOnlineTimeWindow="15">
<providers>
<clear />
<add name="UmbracoMembershipProvider" type="umbraco.providers.members.UmbracoMembershipProvider" enablePasswordRetrieval="false" enablePasswordReset="false" requiresQuestionAndAnswer="false" defaultMemberTypeAlias="Another Type" passwordFormat="Hashed" />
<add name="UsersMembershipProvider" type="umbraco.providers.UsersMembershipProvider" enablePasswordRetrieval="false" enablePasswordReset="false" requiresQuestionAndAnswer="false" passwordFormat="Hashed" />
<add name="SimpleMembershipProvider" type="WebMatrix.WebData.SimpleMembershipProvider, WebMatrix.WebData"/>
</providers>
</membership>
然后让我们说,对于网站中的特定部分,我想使用SimpleMembershipProvider进行身份验证(网站的其余部分将使用默认提供程序,即UmbracoMembershipProvider)...因此我需要使用以下内容初始化SimpleMembership:
WebSecurity.InitializeDatabaseConnection(
Constants.Membership.ConnectionStringName,
Constants.Membership.TableName,
Constants.Membership.UserIdColumnName,
Constants.Membership.UserNameColumnName,
false);
但似乎上述代码仅在SimpleMembershipProvider是defaultProvider时才有效。 我看不到指定我想要使用的提供者名称的方法?这甚至可能吗?或者,简单会员是否假定您定义了一个成员资格和角色提供者?
答案 0 :(得分:0)
SimpleMembershipProvider
是ExtendedMembershipProvider
的实现。虽然WebSecurity
可以与扩展提供程序的任何实现一起使用,但如果使用SimpleMembershipProvider
,它会与SimpleMembershipProvider
有一些可疑的耦合。
基本上WebSecurity
需要通过ASPNET
初始化,否则在使用扩展成员资格接口时会抛出异常。如果没有初始化,那么它将包装默认的MembershipProvider
提供程序,并且可以与原始SimpleMembershipProvider
接口和旧架构一起使用。
初始化例程仅初始化默认提供程序,前提是它们可以转换为简单的提供程序实现。所以是的,你不能使用SimpleRoleProvider
或SimpleMembershipProvider
,除非它们被配置为默认实例。
有关SimpleMembershipProvider
here的限制的更多信息。
有一种解决方法。您可以使用反射在初始化期间临时将提供程序交换为默认值,然后将其切换回来。有关完成此操作的示例,请参阅BetterMembership.Net。该库扩展membershipProviderField = typeof(Membership)
.GetField("s_Provider", BindingFlags.NonPublic | BindingFlags.Static);
var originalMembershipProvider = membershipProviderField.GetValue(null);
membershipProviderField.SetValue(null, mySimpleMembershipProvider);
WebSecurity.InitializeDatabaseConnection(...)
membershipProviderField.SetValue(null, originalMembershipProvider);
专门用于多提供商系统。
{{1}}