我在 Windows Server 2008 R2数据中心上使用 umbraco 6.2.1 和 SQL Server Express 2008 设置了一个复杂的项目。我使用自己的.Net代码在后端的 Developer -section中的一个装配和剃刀代码中扩展了umbraco。从开发的某些方面来看,我无法再在后端创建用户。我没有收到任何错误消息,但没有用户创建。我没有实现自定义UsersMembershipProvider。据我所知,我根本不会干涉用户创建过程。我在umbraco跟踪日志文件中找不到任何信息,也没有在数据库中的umbracoLog表中找到任何信息。如何进一步调查发生的情况并解决我的问题?
的修改
您可以访问“用户”部分吗?
是的,用户部分或其子页面没有其他问题。
你能进入创作界面吗?
是的,就我所见,看起来应该是这样。
用户创建在什么时候失败?
我可以单击“创建”,对话框关闭,树刷新但我尝试创建的用户不存在。没有任何错误信息。
当你说你“设置了一个复杂的项目”时 - 这是否意味着它不是你的项目,或者它是暗示它已经变得越来越复杂。
这是我的项目。我想说重新安装一个干净的umbraco版本会非常耗时,并且可能不是一个选择。
编辑2
我现在安装了Elmah以获得更好的日志记录,但没有抛出任何异常。 Elmah本身正在工作,它会记录其他例外情况。
修改3
在完成整个过程(打开对话框,输入数据,接受对话框)时,这两行是我在浏览器控制台中显示的唯一行。
答案 0 :(得分: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()
来获取web.config文件中定义的MembershipProvider。然后,它使用标准.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;
}
即使我能够解决我的问题,我认为umbraco的行为和结构在这一部分中是非常不透明的。我能够一直使用umbracos自己的方法创建一个新的后端用户,因为他们不像MembershipProvider那样进行密码复杂性检查。不应该有不同的方法来做同样的事情因为如果你遇到任何问题就很难调试。