2014-08-14 5 views
1

Я настроил как-то сложный проект с использованием Umbraco 6.2.1 на Windows Server 2008 R2 Datacenter с SQL Server Express 2008. Я расширил umbraco, используя собственный код .Net в коде assebmly и бритве в базе данных Разработчик-раздел. Поскольку в какой-то момент разработки я больше не могу создавать пользователей в бэкэнде. Я не получаю сообщение об ошибке, но пользователь не создан. Я не реализовал пользовательский UserMembershipProvider. Насколько я вижу, я вообще не вмешиваюсь в процесс создания пользователя. Я не могу найти никакой информации в файле журнала трассировки umbraco или в таблице umbracoLog в базе данных. Как я могу продолжить исследование, что происходит и решить мою проблему?Невозможно создать пользователя в интерфейсе


Редактировать

Вы можете получить доступ к разделу "Пользователи"?

Да, нет других проблем с разделом Пользователи или ее подстраниц.

Можете ли вы перейти на экран создания?

Да, похоже, это должно, насколько я могу судить.

В какой момент создается пользовательское создание?

Я могу нажать кнопку create, диалог закрывается, дерево обновляется, но пользователь, которого я пытался создать, не существует. Сообщение об ошибке отсутствует.

Когда вы говорите, что вы «создали какой-то сложный проект» - значит ли это, что это не ваш проект или он есть, и вы подразумеваете, что он только что вырос.

Это мой проект. Я хотел сказать, что переустановка чистой версии umbraco будет очень трудоемкой и, по-видимому, не вариантом.


Edit 2
Я установил Elmah теперь лучше лесозаготовок, но не исключение брошено. Elmah сам работает, он регистрирует другие исключения, как должен.


Edit 3 Эти две строки являются единственными, показывая в моем браузере консоли при этом весь процесс (открытый диалог, ввести данные, принять диалог).

Chrome Console Screenshot

+0

В какой момент создается пользовательское создание? Можете ли вы получить доступ к разделу «Пользователи»? Можете ли вы попасть на экран создания? Когда вы говорите, что вы «создали какой-то сложный проект» - значит ли это, что это не ваш проект или он есть, и вы подразумеваете, что он только усложнился. – Digbyswift

+0

Попробуйте открыть консоль в браузере. Обычно вы можете видеть, что неправильно с консоли. –

+0

Stumped. Мне интересно, если вы в какой-то момент модернизировали Umbraco в своем проекте? Если это так, возможно, не все файлы были включены в проект. – Digbyswift

ответ

0

Я был в состоянии решить проблему самостоятельно.Я перенастроены umbracos' UsersMembershipProvider для удовлетворения моих требований надежности пароля, как это:

<add name="UsersMembershipProvider" 
    type="Umbraco.Web.Security.Providers.UsersMembershipProvider, Umbraco" 
    passwordStrengthRegularExpression="^.*(?=.{8,20})(?=.*[a-z])(?=.*[A-Z])(?=.*[_\W])(?=.*[\d]).*$" 
    minRequiredNonalphanumericCharacters="0" 
    minRequiredPasswordLength="4" 
    ... 
/> 

При создании пользователя с помощью Umbraco бэкенд (webinterface), umbraco.userTasks.Save() называется внутренне. Это использует Umbraco.Core.Security.MembershipProviderExtensions.GetUsersMembershipProvider(), чтобы получить членствоProvider, определенное в файле web.config. Затем он генерирует случайный пароль, используя стандартный метод .Net GeneratePassword:

Membership.GeneratePassword(usersMembershipProvider.MinRequiredPasswordLength, usersMembershipProvider.MinRequiredNonAlphanumericCharacters) 

Потому что я не изменял значение по умолчанию MinRequiredPasswordLength и MinRequiredNonAlphanumericCharacters - passwordStrengthRegularExpression является вынужденным независимым от этих двух - новый пользователь не может быть создан потому что пароль не может быть установлен. Даже при изменении параметров в 8 и 1 я не могу быть уверен, что пароль соответствия моего выражения генерируется каждый раз, поэтому мне нужно было изменить регулярное выражение менее безопасный один:

^.*(?=.{8,20})(?=.*[a-zA-Z])(?=.*[_\W]).*$ 

К сожалению, я не вижу никакой возможности изменить это, потому что этот механизм для создания пользователей глубоко интегрирован в umbraco. Кроме того, я не понимаю, почему не исключение регистрируется, как код, создающий пользователю кажется, журнал исключений:

catch (Exception exception) 
{ 
    LogHelper.Error<userTasks>(string.Format("Failed to create the user. Error from provider: {0}", providerError.ToString()), exception); 
    return false; 
} 

Даже если бы я был в состоянии решить мою проблему, я думаю, что поведение и achritecture из Umbraco очень непрозрачной в этой его части. Я смог создать нового бэкэнд-пользователя, постоянно использующего собственные методы umbracos, потому что они не выполняют проверки сложности пароля, как это делает MemberhipProvider. Не должно быть разных способов сделать то же самое, потому что тогда очень сложно отладить, если у вас возникнут какие-либо проблемы.

+0

Georg, я пробовал ваше решение, но не смог создать новых пользователей. Могу ли я прояснить некоторые вещи? В файле web.config вы также изменили членство defaultProvider на «UsersMembershipProvider»? Использовалось ли passwordStrengthRegularExpression ^. * (? =. {8,20}) (? =. * [A-zA-Z]) (? =. * [_ \ W]). * $. Пример того, как настроен ваш web.config, будет очень полезен. Заранее спасибо. –

+0

При использовании umbraco у вас обычно есть два MembershipProviders, один для участников (frontend users), который называется 'UmbracoMembershipProvider' и один для пользователей (бэкэнд-пользователей) с именем' UsersMembershipProvider'. Я использую RegEx выше в моей рабочей среде. Можете ли вы предоставить больше информации о своей ситуации или лучше открыть другой вопрос (и связать его здесь), если моя конкретная проблема не подходит вам? –