【问题标题】:Can not create user in backend无法在后端创建用户
【发布时间】:2014-08-14 13:20:52
【问题描述】:

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


编辑

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

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

你能进入创建屏幕吗?

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

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

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

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

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


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


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

【问题讨论】:

  • 用户创建在什么时候失败?您可以访问“用户”部分吗?你能进入创建屏幕吗?当您说您“建立了一个复杂的项目”时 - 这是否意味着它不是您的项目,或者它是您的项目,并且您暗示它变得越来越复杂。
  • 尝试在浏览器中打开您的控制台。通常你可以从控制台看到什么问题。
  • 难住了。我想知道您是否在某个时候在您的项目中升级了 Umbraco?如果是这样,则可能并非所有文件都已合并到项目中。
  • 是的,我将 umbraco 从版本 6.1.6 更新到 6.2.0 到 6.2.1。我正常运行了 umbraco 安装程序,我能想到的其他一切似乎都可以工作。我不确定自更新以来是否出现此问题。几周前我已经更新了,但我最近才尝试创建一个新用户。

标签: asp.net umbraco umbraco6


【解决方案1】:

我能够自己解决问题。我重新配置了 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 后端(Web 界面)创建用户时,会在内部调用 umbraco.userTasks.Save()。这使用Umbraco.Core.Security.MembershipProviderExtensions.GetUsersMembershipProvider() 来获取在web.config 文件中定义的MembershipProvider。然后它使用标准 .Net 方法GeneratePassword 生成一个随机密码:

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

因为我没有更改 MinRequiredPasswordLengthMinRequiredNonAlphanumericCharacters 的默认值 - passwordStrengthRegularExpression 独立于这两个 - 无法创建新用户,因为无法设置密码。即使将参数更改为81,我也无法确定每次都会生成与我的表达式匹配的密码,这就是为什么我需要将我的正则表达式更改为不太安全的密码:

^.*(?=.{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 那样进行密码复杂性检查。不应该有不同的方法来做同样的事情,因为如果遇到任何问题都很难调试。

【讨论】:

  • Georg,我已经尝试过您的解决方案,但仍然无法创建新用户。我可以澄清一些事情吗?在 web.config 中,您是否也将成员资格 defaultProvider 更改为“UsersMembershipProvider”?是否使用了密码强度正则表达式 ^.*(?=.{8,20})(?=.*[a-zA-Z])(?=.*[_\W]).*$.如何配置 web.config 的示例将非常有帮助。提前致谢。
  • 使用 umbraco 时,您通常会获得两个 MembershipProvider,一个用于成员(前端用户),名称为 UmbracoMembershipProvider,另一个用于用户(后端用户),名称为 UsersMembershipProvider。我在生产环境中使用上面的 RegEx。如果我的具体问题不适合您,您能否提供有关您的情况的更多信息或更好地提出不同的问题(并在此处链接)?
猜你喜欢
  • 2014-12-12
  • 1970-01-01
  • 1970-01-01
  • 2016-04-17
  • 2023-04-09
  • 1970-01-01
  • 2018-05-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多