Sitecore 8 中外部用户的成员资格

Membership for external users in Sitecore 8

我想为 Sitecore 8 网站建立一个用户注册商店。用户将进入外部数据库。

Asp.net MVC 带有内置的成员资格(AccountController、视图等)。我想将其移植到我的 Sitecore 项目中。问题是 Sitecore 也在内部使用会员资格。我知道有一种方法可以通过 Sitecore authenticate users against external membership database.

中描述的切换提供商让会员为 Sitecore 6.x 版本工作

Sitecore 8 的流程还是一样吗?

这仍然适用于 Sitecore 8 和核心 asp.net 会员功能,并且仍然可以使用切换会员提供程序。 Sitecore 8 的 mongo 数据库端用于 xDb,但您仍然使用会员系统进行身份验证。

我不会提供任何进一步的细节,因为您引用的 post 似乎涵盖了所有内容。以防万一这里有另一个好 post:

https://himadritechblog.wordpress.com/2014/11/24/sitecore-custom-membership-provider/

确保在 domains.config 中为您的会员系统声明一个新域。

我个人喜欢让会员逻辑非常简单并且远离自定义提供程序。 Sitecore 有一个虚拟用户的概念,您可以在对外部数据库进行身份验证后将其实例化。您可以在此虚拟用户上设置任何自定义属性,并让 sitecore 将其记录在 xDB 中。 这里有一个很好的example.

我最终没有使用 SimpleMembership 而只是使用 Membership。我无法让 thecodeking link 提到的适配器工作。

此方法没有正确记录。我只需要更改配置文件。我确实 而不是 必须创建一个继承自 MembershipProvider.

的自定义 class

Web.config:

membership部分,

  • realProviderName更改为"switcher"
  • 复制 "sql" 节点并将名称和 connectionStringName 更改为 "external"

switchingProviders部分,

  • 添加 "external" 具有域 "external"
  • 的节点

web.config:

<membership defaultProvider="sitecore" hashAlgorithmType="SHA1">
  <providers>
    <clear />
    <!-- change realProviderName to "switcher" -->
    <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"
         />
    <!-- copy "sql" node and change name and connectionStringName to "external" -->
    <add name="external"
         type="System.Web.Security.SqlMembershipProvider"
         connectionStringName="external"
         applicationName="sitecore"
         minRequiredPasswordLength="1"
         minRequiredNonalphanumericCharacters="0"
         requiresQuestionAndAnswer="false"
         requiresUniqueEmail="false"
         maxInvalidPasswordAttempts="256"
         />
  </providers>
</membership>

<switchingProviders>
  <membership>
    <provider providerName="sql" storeFullNames="true" wildcard="%" domains="*" />
    <!-- add "external" node with domains "external" -->
    <provider providerName="external" storeFullNames="true" wildcard="%" domains="external" />
  </membership>
</switchingProviders>

ConnectionStrings.config:

  • 添加连接"external"

配置:

<add name="external" connectionString="..." providerName="System.Data.SqlClient"/>

Domains.config:

  • 添加域"external"

配置:

<domain name="external" ensureAnonymousUser="false" />

然后直接使用 "external" 提供程序将用户保存到 external 数据库。这是关键点

// uses "external" provider directly
Membership.Providers["external"].CreateUser(...)

而不是保存到 core 数据库的这个。

// uses default provider
Membership.CreateUser(...)