【问题标题】:asp.net membership sitecoreasp.net 会员网站核心
【发布时间】:2014-01-03 20:57:09
【问题描述】:

我正在将 ASP.NET 网站迁移到 Sitecore 7。我有一个登录页面供外部用户登录我的网站。我正在尝试访问外部 aspnetdb 来执行此身份验证。我已经关注了这篇文章中的内容:

Sitecore authenticate users against external membership database

当我尝试调用 GetUser 方法时,我得到一个空值。此外,当我转到我的用户管理器时,我看不到我的任何用户位于 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 我已经尝试过使用新域和已经存在的外联网域......我得到了相同的结果。

标签: asp.net asp.net-membership sitecore


【解决方案1】:

在您的成员资格和角色提供者定义中,您需要将 defaultProvider 更改为 switcher。这意味着当 Sitecore 尝试识别要使用的提供程序时,它将使用您的切换提供程序中的配置。

另外我认为你应该改变你的switchingproviders的顺序,这样“extranet”就比你的catch all“*”高。

编辑此配置适用于我的环境:

<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”,并且您的提供程序首先位于交换提供程序中,并且它提到了外联网。

还要确保您的提供商正确设置了“storeFullNames”。如果您的数据库不包含域(例如 extranet\myUser),则应将其设置为 false。

【讨论】:

  • 我尝试了这两个建议,但没有成功。根据文档,我们应该将 defaultProvider 保留为 sitecore,并将 sitecore 提供者 realProviderName 更改为 switcher。
  • 我正在查看 Data 文件夹下的日志,但没有看到任何错误。当我调用 Domain.GetUsers() 时,我只会得到“extranet\anonymous”用户。
  • 任何其他想法可能是什么问题?已经坚持了好几天了。
  • 我已经添加了我的示例配置并进行了一些详细说明。
  • 您使用的是哪个版本的 sitecore?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-18
  • 1970-01-01
相关资源
最近更新 更多