加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-core – Microsoft.AspNet.Identity vnext中的UserValid

发布时间:2020-12-16 07:20:14 所属栏目:asp.Net 来源:网络整理
导读:我有一个问题,当我使用microsoft.aspnet.identity(在创建新项目时选择的个人用户帐户 – asp.net 5的默认mvc项目模板)时,我无法使用电子邮件地址作为用户名.我在很多地方都读到这是解决方案: UserManager.UserValidator = new UserValidatorApplicationUser
我有一个问题,当我使用microsoft.aspnet.identity(在创建新项目时选择的个人用户帐户 – asp.net 5的默认mvc项目模板)时,我无法使用电子邮件地址作为用户名.我在很多地方都读到这是解决方案:

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

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

编辑:

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

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);
        }
    }

解决方法

在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();

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读