1

我在带有SQL Server Express 2008的Windows Server 2008 R2 Datacenter上使用umbraco 6.2.1建立了一个复杂的项目。我在后端的开发者部分中使用自己的 .Net 代码和 razor 代码扩展了 umbraco 。由于在开发中的某个时刻,我无法再在后端创建用户。我没有收到任何错误消息,但没有创建用户。我没有实现自定义的 UsersMembershipProvider。据我所知,我根本不干涉用户创建过程。我在 umbraco 跟踪日志文件和数据库的 umbracoLog 表中都找不到任何信息。如何进一步调查发生的情况并解决我的问题?


编辑

您可以访问“用户”部分吗?

是的,用户部分或其子页面没有其他问题。

你能进入创建屏幕吗?

是的,就我所见,它看起来应该如此。

用户创建在什么时候失败?

我可以单击创建,对话框关闭,树刷新但我尝试创建的用户不存在。没有任何类型的错误消息。

当你说你“建立了一个复杂的项目”时——这是否意味着它不是你的项目,或者它是你的项目,并且你暗示它刚刚变得复杂。

这是我的项目。我想说重新安装 umbraco 的干净版本将非常耗时,并且可能不是一个选择。


编辑 2
我现在安装了Elmah以获得更好的日志记录,但没有抛出异常。Elmah 本身正在工作,它会记录其他应有的异常。


编辑 3 在完成整个过程(打开对话框、输入数据、接受对话框)时,这两行是唯一显示在我的浏览器控制台中的行。

Chrome 控制台截图

4

1 回答 1

0

我能够自己解决问题。我重新配置了 umbracosUsersMembershipProvider以满足我的密码强度要求,如下所示:

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

使用 umbraco 后端(web 界面)创建用户时,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 那样进行密码复杂性检查。不应该有不同的方法来做同样的事情,因为如果遇到任何问题都很难调试。

于 2014-08-27T13:49:13.800 回答