1

我们在我们的项目中使用System.Web.Security.DefaultMembershipProvider并且我们碰壁了。

MembershipProvider 合约的这个特定实现使用硬编码模型定义(System.Web.Providers.ModelHelper.membershipSsdl 和 Sytem.Web.Providers.ModelHelper.membershipCsdl)使用 EntityFramework 创建模型和生成的数据库。

此特定模型定义将UserName字段的最大长度设置为50 个字符,将Email字段的最大长度设置为256个字符。现在在很多情况下,我们的用户可能希望/被要求使用他们的电子邮件地址作为他们的用户名。显然,这对他们中的很多人来说是不可能的,因为该模型中的数据验证将失败。

据我所知,无法覆盖此模型定义,并且作为 Microsoft 开源程序的一部分,CodePlex 上没有 ASPNET 通用提供程序库的源代码。然而,Visual Studio 中的 resharper 将执行大量的反编译,让我们能够看到实现的内部工作原理。

在这个关头,我们不得不走“实施您自己的会员提供商”路线,但我/我们想看看那里是否有人对这个问题有任何建议/替代想法/建议。否则看起来我们要复制几千行现有的 MS 代码只是为了改变几个字符。

4

1 回答 1

1

对于任何对此问题感兴趣的人,我们决定不滚动我们自己的提供程序数据存储,并简单地将用户名字段的使用隐藏在最终用户之外。他们的电子邮件地址被用作他们的“用户名”,但在内部,我们实际上在用户名字段中存储了一个 guid,并编写了一些代码在内部将电子邮件转换为“用户名”,然后再执行身份验证等操作。不是很好,但它让我们超越了界限。

于 2014-09-25T08:08:29.927 回答