【问题标题】:.NET MVC 6 / vNext UserValidator to allow alphanumeric characters.NET MVC 6 / vNext UserValidator 允许使用字母数字字符
【发布时间】:2016-02-05 10:07:11
【问题描述】:

我要做的只是在 .NET MVC 6 / vNext 注册过程中允许字母数字字符,并且我见过的每个教程(即Configure Microsoft.AspNet.Identity to allow email address as username)都引用UserManager.UserValidator,其中现在不可用当前框架。

我已经看到了这个:UserValidator in Microsoft.AspNet.Identity vnext 这看起来和我的问题一样,但他们已经将UserNameValidationRegex 属性从框架中移除了。太棒了。

services.AddIdentity<ApplicationUser, IdentityRole>(
                o => {
                    o.Password.RequireDigit = false;
                    o.Password.RequireLowercase = false;
                    o.Password.RequireUppercase = false;
                    o.Password.RequireNonLetterOrDigit = false;
                    o.Password.RequiredLength = 2;
                    //o.User.AllowedUserNameCharacters here seems to be the only logical thing I can access
                })
                .AddEntityFrameworkStores<ApplicationDbContext>()
                .AddDefaultTokenProviders();

我找到了o.User.AllowedUserNameCharacters,但是没有找到关于此的文档,我不知道我必须将其设置为什么格式?有谁在同一条船上解决了这个问题?

提前致谢。

【问题讨论】:

    标签: c# asp.net .net asp.net-mvc asp.net-core


    【解决方案1】:

    我查看了aspnet/Identity GitHub repository 并搜索了您找到的属性 (AllowedUserNameCharacters)。这就是我所拥有的。

    来自 repo 中的 UserOptions.cs 类:[Link Here]

    /// <summary>
    /// Gets or sets the list of allowed characters in the username used to validate user names.
    /// </summary>
    /// <value>
    /// The list of allowed characters in the username used to validate user names.
    /// </value>
    public string AllowedUserNameCharacters { get; set; } = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-._@+";
    

    因此,您似乎需要将此属性设置为 "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"(即从最初设置的字符串末尾删除符号。这应该可以实现您想要的。

    就为什么进行此更改而言,根据 issue #558,他们正试图摆脱正则表达式以提高安全性。请查看here 了解完整详情。

    【讨论】:

    • 非常感谢您花时间浏览 Github 存储库并为我回答这个问题,我相信它将来也会帮助很多其他人。谢谢!
    • @ChrisDixon 先生,不客气。很高兴它很有用:)
    • 刚刚偶然发现了这个答案。严重地?!包含例如的用户名呢?西里尔字符或变音符号或任何其他非 ASCII UTF8-16 字符?!该字段可以为空以跳过检查吗?!
    • 好吧,string.empty 跳过了检查……嗯……这一切似乎都过于复杂了 atm
    • 此默认值已更新为包含 + 符号。 Issue trackersource
    【解决方案2】:

    正如@DoubleVoid 在 cmets 中指出的那样,您可以使用空字符串来允许任何字符。

    【讨论】:

      【解决方案3】:

      如果您想在电子邮件中使用特殊字符。试试下面的代码

          services.Configure<IdentityOptions>(options = { 
                  options.User.AllowedUserNameCharacters = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!#$%&'*+-/=?^_`{|}~.@";
        });
      

      有效的电子邮件地址https://en.wikipedia.org/wiki/Email_address#Local-part

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-11-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-07-15
        相关资源
        最近更新 更多