2014-01-03 4 views
4

Я переношу сайт ASP.NET в Sitecore 7. У меня есть страница входа для внешних пользователей для входа на мой сайт. Я пытаюсь получить доступ к внешнему aspnetdb для выполнения этой проверки подлинности. Я следовал за то, что в этом посте:asp.net membership sitecore

Sitecore authenticate users against external membership database

Когда я пытаюсь вызвать метод GetUser я получаю нулевое значение. Кроме того, когда я перехожу к своему User Manager, я не вижу ни одного из моих пользователей, находящихся в 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> 

Любая помощь будет принята с благодарностью.

Спасибо.

+0

Я заметил из ссылки на другую статью, которую вы упомянули, была ссылка на создание нового домена и изменение поставщика домена. Вы также вносили эти изменения? –

+0

@mark Я пробовал как с новым доменом, так и с доменом экстрасети, который уже существует ... Я получаю одинаковые результаты с обоими. – AspUser7724

ответ

3

В определениях вашего членства и roleprovider вам необходимо изменить defaultProvider на коммутатор. Это означает, что когда Sitecore пытается определить, какой поставщик использовать, он будет использовать конфигурацию в ваших коммутаторах.

Также я думаю, что вы должны изменить порядок своих коммутаторов, чтобы «экстрасеть» была выше, чем ваш «все».

Редактировать конфигурация работает на моем окружении:

<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> 

Если вы получаете Экстранет \ Анонимно назад и этот пользователь не в пользовательской базе данных вы фактически используя стандартную базу данных Sitecore. Убедитесь, что для параметра defaultProvider установлено значение «switcher», и сначала у вас есть провайдер в поставщике swithcing и что он упоминает экстранет.

Также убедитесь, что ваш провайдер правильно установил «storeFullNames». Если ваша база данных не содержит домен (например, extranet \ myUser), тогда он должен быть установлен в значение false.

+0

Я пробовал делать оба предложения, и это не сработало. Согласно документации, мы должны оставить defaultProvider как sitecore и сменить поставщика realProviderName поставщика sitecore на коммутатор. – AspUser7724

+0

Есть ли ошибки в журнале? –

+0

Я смотрю журналы в папке «Данные», и я не вижу никаких ошибок. Когда я звоню в Domain.GetUsers(), я получаю только пользователя «экстрасети \ анонимный». – AspUser7724

Смежные вопросы