4

我有一个问题,我在使用 microsoft.aspnet.identity 时无法使用电子邮件地址作为用户名(创建新项目时选择了个人用户帐户 - asp.net 5 的默认 mvc 项目模板)。我在很多地方都读到这是解决方案:

UserManager.UserValidator = new UserValidator<ApplicationUser>(UserManager) { AllowOnlyAlphanumericUserNames = false };

但是在新版本的asp.net身份中,UserManager似乎没有一个叫UserValidator的属性。“UserValidator”已被识别,但我想它现在以不同的方式添加到 UserManager 中。我在 UserManager 上看不到任何相关属性。

编辑:

“Identity”的 github 存储库中的单元测试对此案例进行了测试。它目前是此文件中的最后一个:

https://github.com/aspnet/Identity/blob/dev/test/Microsoft.AspNet.Identity.Test/UserValidatorTest.cs

我想这应该为答案提供一个线索,但我看不出这会在我的代码中出现在哪里。

    [Theory]
    [InlineData("test_email@foo.com", true)]
    [InlineData("hao", true)]
    [InlineData("test123", true)]
    [InlineData("!noway", true)]
    [InlineData("foo@boz#.com", true)]
    public async Task CanAllowNonAlphaNumericUserName(string userName, bool expectSuccess)
    {
        // Setup
        var manager = MockHelpers.TestUserManager(new NoopUserStore());
        manager.Options.User.UserNameValidationRegex = null;
        var validator = new UserValidator<TestUser>();
        var user = new TestUser {UserName = userName};

        // Act
        var result = await validator.ValidateAsync(manager, user);

        // Assert
        if (expectSuccess)
        {
            IdentityResultAssert.IsSuccess(result);
        }
        else
        {
            IdentityResultAssert.IsFailure(result);
        }
    }
4

2 回答 2

5

在 Startup 类的 ConfigureServices 方法中,AddIdentity 方法具有允许配置不同选项的重载。

// Add Identity services to the services container.
services.AddIdentity<ApplicationUser, IdentityRole>()
    .AddEntityFrameworkStores<ApplicationDbContext>()
    .AddDefaultTokenProviders();

将其更改为以下允许将电子邮件地址用于用户名。

// Add Identity services to the services container.
services.AddIdentity<ApplicationUser, IdentityRole>(options => { options.User.UserNameValidationRegex = null; })
    .AddEntityFrameworkStores<ApplicationDbContext>()
    .AddDefaultTokenProviders();
于 2015-05-04T18:24:48.960 回答
3

正如 Michal W. 所提到的,您可以在 Startup 类的 ConfigureServices 方法中进行配置。

您可以使用 AddIdentity 方法的重载来设置所需的选项。

你会改变这个:

// Add Identity services to the services container.
services.AddIdentity<ApplicationUser, IdentityRole>()
    .AddEntityFrameworkStores<ApplicationDbContext>()
    .AddDefaultTokenProviders();

为此,允许电子邮件地址工作:

// Add Identity services to the services container.
services.AddIdentity<ApplicationUser, IdentityRole>(options => { 
      options.User.AllowedUserNameCharacters =
                "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-._@+"; 
     })
    .AddEntityFrameworkStores<ApplicationDbContext>()
    .AddDefaultTokenProviders();
于 2016-03-19T22:26:51.490 回答