asp.net membership sitecore

4

我正在将一个ASP.NET网站迁移到Sitecore 7。我有一个登录页面,供外部用户登录我的网站。我尝试访问外部aspnetdb来进行身份验证。我已经按照这篇文章中的步骤进行:

Sitecore authenticate users against external membership database

当我尝试调用GetUser方法时,我得到了一个null值。此外,当我转到我的用户管理器时,我没有看到位于aspnetdb中的任何用户。

我的配置如下所述:

我在ConnectionsStrings.config中添加了一个连接字符串:

  <add name="test" connectionString="user id=***;password=***;Data Source=localhost;Database=aspnetdb"/>

我在web.config文件中添加了成员资格和角色提供程序的定义:

<membership defaultProvider="sitecore" hashAlgorithmType="SHA1">
  <providers>
    <clear/>
    <add name="sitecore" type="Sitecore.Security.SitecoreMembershipProvider, Sitecore.Kernel" realProviderName="switcher" providerWildcard="%" raiseEvents="true"/>
    <add name="sql" type="System.Web.Security.SqlMembershipProvider" connectionStringName="core" applicationName="sitecore" minRequiredPasswordLength="1" minRequiredNonalphanumericCharacters="0" requiresQuestionAndAnswer="false" requiresUniqueEmail="false" maxInvalidPasswordAttempts="256"/>
    <add name="switcher" type="Sitecore.Security.SwitchingMembershipProvider, Sitecore.Kernel" applicationName="sitecore" mappings="switchingProviders/membership"/>
    <add name="testProvider" type="System.Web.Security.SqlMembershipProvider" connectionStringName="test" applicationName="sitecore" minRequiredPasswordLength="1" minRequiredNonalphanumericCharacters="0" requiresQuestionAndAnswer="false" requiresUniqueEmail="false" maxInvalidPasswordAttempts="256"/> 
  </providers>
</membership>
<roleManager defaultProvider="sitecore" enabled="true">
  <providers>
    <clear/>
    <add name="sitecore" type="Sitecore.Security.SitecoreRoleProvider, Sitecore.Kernel" realProviderName="switcher" raiseEvents="true"/>
    <add name="sql" type="System.Web.Security.SqlRoleProvider" connectionStringName="core" applicationName="sitecore"/>
    <add name="switcher" type="Sitecore.Security.SwitchingRoleProvider, Sitecore.Kernel" applicationName="sitecore" mappings="switchingProviders/roleManager"/>
    <add name="testProvider" type="System.Web.Security.SqlRoleProvider" connectionStringName="test" applicationName="sitecore"/>
  </providers>
</roleManager>

然后我添加了我的域名切换映射:

<switchingProviders>
      <membership>
        <provider providerName="sql" storeFullNames="true" wildcard="%" domains="*"/>
        <provider providerName="testProvider" storeFullNames="false" wildcard="%" domains="extranet"/>
      </membership>
      <roleManager>
        <provider providerName="sql" storeFullNames="true" wildcard="%" domains="*"/>
         <provider providerName="testProvider" storeFullNames="false" wildcard="%" domains="extranet"/>

      </roleManager>
      <profile>
        <provider providerName="sql" storeFullNames="true" wildcard="%" domains="*"/>
      </profile>
    </switchingProviders>

任何帮助都将不胜感激。
谢谢。

我从你提到的另一篇文章链接中注意到,有关于创建新域和修改域提供商的参考。你也进行了这些更改吗? - mark stiles
@mark 我已经尝试过使用新域和已经存在的外联网域...两者都得到了相同的结果。 - AspUser7724
1个回答

3
在您的会员和角色提供程序定义中,您需要将defaultProvider更改为switcher。这意味着当Sitecore正在尝试识别要使用哪个提供程序时,它将使用您的switchingproviders中的配置。
另外,我认为您应该更改switchingproviders的顺序,使"extranet"高于所有其他匹配项"*"。
编辑此配置在我的环境中有效。
<membership defaultProvider="switcher" hashAlgorithmType="SHA1">
      <providers>
        <clear />
        <add name="Extranet" type="System.Web.Security.SqlMembershipProvider" connectionStringName="Extranet" applicationName="sitecore" requiresQuestionAndAnswer="false" requiresUniqueEmail="false" minRequiredPasswordLength="1" minRequiredNonalphanumericCharacters="0"/>
        <add name="sitecore" type="Sitecore.Security.SitecoreMembershipProvider, Sitecore.Kernel" realProviderName="sql" providerWildcard="%" raiseEvents="true" />
        <add name="sql" type="System.Web.Security.SqlMembershipProvider" connectionStringName="core" applicationName="sitecore" minRequiredPasswordLength="1" minRequiredNonalphanumericCharacters="0" requiresQuestionAndAnswer="false" requiresUniqueEmail="false" maxInvalidPasswordAttempts="256" />
        <add name="switcher" type="Sitecore.Security.SwitchingMembershipProvider, Sitecore.Kernel" applicationName="sitecore" mappings="switchingProviders/membership" />
      </providers>
    </membership>

对于switchingProvider:

<switchingProviders>
      <membership>
        <provider providerName="Extranet" storeFullNames="false" wildcard="%" domains="extranet" />
        <provider providerName="sql" storeFullNames="true" wildcard="%" domains="*" />
      </membership>

如果您收到Extranet\Anonymous的返回并且此用户不在您的自定义数据库中,则实际上是使用了标准的Sitecore数据库。请确保将defaultProvider设置为"switcher"并且在swithcing provider中首先使用您的提供程序,并提到extranet。
另外,请确保您的提供程序正确设置了"storeFullNames"。如果您的数据库不包含域(例如,extranet\myUser),则应将其设置为false。

我尝试了两种建议,但都没有成功。根据文档,我们应该将defaultProvider保留为sitecore,并将sitecore提供程序realProviderName更改为switcher。 - AspUser7724
还有什么其他的想法可能是错的吗?我已经卡在这个问题上超过几天了。 - AspUser7724
我已经添加了我的示例配置并进行了一些详细说明。 - Jens Mikkelsen
嗯...你要么得自定义用户管理器来排除你的域,要么就可以在你的GetAllUsers方法中返回0个用户。但是我不知道这样做会有什么副作用。 - Jens Mikkelsen
@Jens...我在同一Sitecore实例中有两个站点...每个站点都有自己的域名。它们有自己的域名是为了可以基于域名在Sitecore中分组角色。此外,每个站点都有自己的登录...一个站点需要对Sitecore用户进行身份验证,而另一个站点需要对外部数据库进行身份验证(就像上面的解决方案)。这可能吗? - AspUser7724
显示剩余11条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接