【问题标题】:Increase maximum UserName length in a custom ASP.Net Membership增加自定义 ASP.Net 成员资格中的最大用户名长度
【发布时间】:2016-03-04 13:49:11
【问题描述】:

我正在将成员资格提供程序与 ASP.NET 一起使用。用户名的最大长度为 50。 有没有办法增加呢?

我已经尝试增加数据库中的列大小,但 MemberShip.CreateUser 因长用户名而失败并出现 ProviderError

【问题讨论】:

  • 改变数据库列大小,你基本上可以适应任何你需要的东西
  • @Dalorzo 还不够,某处有控件
  • @SylvainBiehler:在哪里?在你贵?您使用什么控件,自定义控件还是内置控件?您的问题缺少这些细节。
  • Dalorzo Quiestion 更新
  • 究竟是哪个 MembershipProvider?它是一个抽象类,因此实现取决于具体实现。

标签: asp.net asp.net-membership


【解决方案1】:

您始终可以覆盖 UserName 属性,并通过 DataAnnotations 指定 StringLength。默认情况下,这将在您的 IdentityModel.cs 文件中。

将此行添加到您的ApplicationUserclass:

[StringLength(80)]
public new string UserName {get;set;}

我刚刚运行了一个测试并创建了一个包含 70 个字符长度的字符串的用户。

【讨论】:

    【解决方案2】:

    增加自定义 ASP.Net Membership 中的最大用户名长度

    您的自定义成员资格提供程序应实现System.Web.Security.MembershipProvider(请参阅MembershipProvider)。这有一个你必须重写的方法:

    public abstract MembershipUser CreateUser(string username, string password, string email, string passwordQuestion, string passwordAnswer, bool isApproved, object providerUserKey, out MembershipCreateStatus status);
    

    这是您必须自己验证方法参数的地方,包括传入参数的允许长度。您可以查看 System.Web.Security.SqlMembershipProvider 的内置代码作为验证用户名长度不超过 128 个 unicode 字符的示例。

    所以你必须做两件事。

    1. 在您的数据库架构中,将用户名表字段长度增加到正确的最大允许大小。
    2. 在您的自定义 ASP.Net Membership 提供程序(继承自 System.Web.Security.MembershipProvider 的类)中更改 CreateUser 方法中的验证,以便检查正确的最大允许字符数。

    如果您不确定您的哪个类正在实现MembershipProvider,您可以搜索该字符串的代码文件,或者您可以在此处查看您的web.config 文件以获取类型。

    <configuration>
      <system.web>
        <membership defaultProvider="providerName" >
          <providers>
            <add name="providerName" type="System.Web.Security.SqlMembershipProvider" 
    

    来自SqlMembershipProvider的代码片段

    public override MembershipUser CreateUser(string username, string password, string email, string passwordQuestion, string passwordAnswer, bool isApproved, object providerUserKey, out MembershipCreateStatus status)
    {
      if (!SecUtility.ValidateParameter(ref password, true, true, false, 128)) // check on 128 maximum length
      {
        status = MembershipCreateStatus.InvalidPassword;
        return (MembershipUser) null;
      }
    

    【讨论】:

      猜你喜欢
      • 2014-08-07
      • 2011-06-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-30
      • 2017-07-03
      • 2010-11-15
      • 2012-03-06
      相关资源
      最近更新 更多