AllowOnlyAlphanumericUserNames - как его установить? (RC to RTM, изменяющееся) ASP.NET Identity

Как установить флаг AllowOnlyAlphanumericUserNames в Microsoft.AspNet.Identity.UserManager, чтобы UserValidator разрешил не-буквенно-цифровое имя пользователя?

Ответы

Ответ 1

В конструкторе UserManager:

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

Ответ 2

Еще один способ сделать это:

[Authorize]
public class AccountController : Controller
{
    public AccountController()
        : this(new UserManager<ApplicationUser>(new UserStore<ApplicationUser>(new ApplicationDbContext())))
    {
    }

    public AccountController(UserManager<ApplicationUser> userManager)
    {
        UserManager = userManager;

        // Start of new code
        UserManager.UserValidator = new UserValidator<ApplicationUser>(UserManager)
        {
            AllowOnlyAlphanumericUserNames = false,
        };
        // End of new code
    }

    public UserManager<ApplicationUser> UserManager { get; private set; }
}

Ответ 3

Джон ответ прав, я использовал его ответ, чтобы разрешить email как имя пользователя (не работал по умолчанию)

Пожалуйста, поддержите/примите ответ Джона.
Вот некоторый код, в котором я использовал пользовательский UserManager "для того, чтобы все работало" (Этот путь там меньше повторяется в другом месте)

public class MyUserManager : UserManager<ApplicationUser>
{
    public MyUserManager(DbContext db)
        : base(new UserStore<ApplicationUser>(db))
    {
        this.UserValidator = UserValidator = new UserValidator<ApplicationUser>(this) 
          { AllowOnlyAlphanumericUserNames = false };
    }
}

И вот теперь выглядит код конструктора AccountController:

[Authorize]
public class AccountController : Controller
{
    public AccountController()
        : this(new MyUserManager(new AppContext()))
    {
    }

    public AccountController(UserManager<ApplicationUser> userManager)
    {
        UserManager = userManager;
    }

    public UserManager<ApplicationUser> UserManager { get; private set; }

Ответ 4

Как и в ASP.NET Identity 3.0 (в настоящее время в RC), теперь он настроен как опция для пользователя.

public void ConfigureServices(IServiceCollection services)
{
    // (Rest of code removed)

    // Note the + added to the string of allowed user name characters
    services.AddIdentity<ApplicationUser, IdentityRole>(o => o.User.AllowedUserNameCharacters = @"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789 [email protected]+")
    .AddEntityFrameworkStores<ApplicationDbContext>()
    .AddDefaultTokenProviders();

}

Тот же код, что и Gist: https://gist.github.com/pollax/4449ce7cf47bde6b3a95

Ответ 5

другой способ сделать

var manager = new ApplicationUserManager(new UserStore<ApplicationUser>(context.Get<ApplicationDbContext>()));
            // Configure validation logic for usernames
            manager.UserValidator = new UserValidator<ApplicationUser>(manager)
            {
                AllowOnlyAlphanumericUserNames = false,
                RequireUniqueEmail = true
            };
            // Configure validation logic for passwords
            manager.PasswordValidator = new PasswordValidator
            {
                RequiredLength = 6,
                RequireNonLetterOrDigit = true,
                RequireDigit = true,
                RequireLowercase = true,
                RequireUppercase = true,
            };

Ответ 6

Вы можете написать свой собственный UserValidator, например this. И затем используйте его:

var userManager = new UserManager<ApplicationUser>(new CustomUserStore());
userManager.UserValidator = new CustomUserValidator<ApplicationUser>(userManager);