[asp.net] 전자 메일 주소를 사용자 이름으로 허용하도록 Microsoft.AspNet.Identity 구성

새 응용 프로그램을 만드는 중이며 EF6-rc1, Microsoft.AspNet.Identity.Core 1.0.0-rc1, Microsoft.AspNet.Identity.EntityFramework 1.0.0-rc1, Microsoft.AspNet.Identity를 사용하여 시작했습니다. .Owin 1.0.0-rc1 등, 어제 RTM 릴리스를 통해 오늘 저녁 NuGet을 통해 RTM으로 업데이트했습니다.

지금까지 수행 한 작업에 대한 몇 가지 코드 변경을 제외하고 앱에 대한 로컬 사용자 계정을 만들려고 할 때까지 모든 것이 잘 진행되는 것처럼 보였습니다.

릴리스 후보에서 잘 작동하는 사용자 이름 형식 인 전자 메일 주소를 작업했지만 이제 사용자 이름에 대한 전자 메일 주소로 사용자를 만들 때 다음 유효성 검사 오류가 발생합니다.

사용자 이름 xxxxx@xxxx.com이 잘못되었습니다. 문자 또는 숫자 만 포함 할 수 있습니다.

지난 1 시간 동안 구성 옵션에 대한 솔루션이나 문서를 검색했지만 아무 소용이 없습니다.

사용자 이름에 전자 메일 주소를 허용하도록 구성 할 수있는 방법이 있습니까?



답변

UserManager에서 사용자 고유의 UserValidator를 연결하거나 기본 구현을 해제하여이를 허용 할 수 있습니다.

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


답변

이 C # 버전 (App_Code \ IdentityModels.cs에 있음)은 다음과 같습니다.

public UserManager()
        : base(new UserStore<ApplicationUser>(new ApplicationDbContext()))
    {
        UserValidator = new UserValidator<ApplicationUser>(this) { AllowOnlyAlphanumericUserNames = false };
    }


답변

필자의 경우 ASP.NET Identity 2.0을 사용하여 VS 2013 C #, MVC 5.2.2에서 실행되는 솔루션은 App_Start \ IdentityConfig.cs 내에서 ApplicationUserManager 생성자를 다음과 같이 업데이트하는 것입니다.

public ApplicationUserManager(IUserStore<ApplicationUser> store)
        : base(store)
    {
        this.UserValidator = new UserValidator<ApplicationUser>(this) { AllowOnlyAlphanumericUserNames = false };
    }


답변

동일한 문제가 발생했습니다. 사용자 이름이 이메일이 아닌 사람의 실제 이름이되도록 코드를 변경하려고 할 때 시스템이 동일한 오류 메시지를 표시합니다. “사용자 이름 ABC DEF가 유효하지 않습니다. 문자 나 숫자 만 포함 할 수 있습니다. . ” AllowedUserNameCharacters에 공백 문자 (내 경우에는 마지막)를 추가하는 문제를 해결했습니다.

Asp.Net Core 2.2 및 VS2017을 사용하는 Im

이것은 내 코드입니다

Startup.cs로 이동하여 “// user settings”아래에 줄을 편집하거나 추가합니다.

        services.AddDbContext<ApplicationDbContext>(options =>
            options.UseMySql(Configuration.GetConnectionString("DefaultConnection")));

        services.AddIdentity<ApplicationUser, ApplicationRole>()
            .AddEntityFrameworkStores<ApplicationDbContext>()
            .AddDefaultTokenProviders();

        services.Configure<IdentityOptions>(options =>
        {
            // Password settings.
            options.Password.RequireDigit = true;
            options.Password.RequireLowercase = true;
            options.Password.RequireNonAlphanumeric = true;
            options.Password.RequireUppercase = true;
            options.Password.RequiredLength = 6;
            options.Password.RequiredUniqueChars = 1;

            // Lockout settings.
            options.Lockout.DefaultLockoutTimeSpan = TimeSpan.FromMinutes(5);
            options.Lockout.MaxFailedAccessAttempts = 5;
            options.Lockout.AllowedForNewUsers = true;


            // User settings.
            options.User.AllowedUserNameCharacters =
                "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-._@+ ";
            options.User.RequireUniqueEmail = false;
        });

        services.ConfigureApplicationCookie(options =>


답변

ASP.Net 웹 양식을 사용 중이고이를 수행하려는 경우 IdentityModels.vb / cs 파일을 열고 Public Class UserManager 아래에서 다음과 같이 보이게합니다.

Public Class UserManager
Inherits UserManager(Of ApplicationUser)

Public Sub New()
    MyBase.New(New UserStore(Of ApplicationUser)(New ApplicationDbContext()))
    Users = store
    UserValidator = New UserValidator(Of ApplicationUser)(Me) With {.AllowOnlyAlphanumericUserNames = False}
End Sub

Public Property Users() As IUserStore(Of ApplicationUser)
    Get
        Return m_Users
    End Get
    Private Set(value As IUserStore(Of ApplicationUser))
        m_Users = value
    End Set
End Property
Private m_Users As IUserStore(Of ApplicationUser)

End Class


답변

AspNet.Identity.Core 2.1 이상 사용자의 경우 UserManager의 이러한 유효성 검사기는 읽기 전용입니다. 사용자 이름으로 이메일 주소는 기본적으로 허용되지만 사용자 이름의 문자를 추가로 사용자 정의해야하는 경우 Startup.cs에서 다음과 같이 할 수 있습니다.

public void ConfigureServices(IServiceCollection services)
{
    services.AddIdentity<ApplicationUser, IdentityRole>(options => {
        options.User.AllowedUserNameCharacters = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-._@+/";
    });

    // ... etc
}

(레거시 이유로 ‘/’가 필요했습니다.)


답변

내 자신의 ApplicationUserManager : UserManager 클래스를 코딩하는 것이 나에게 적합하지 않았기 때문에 (아마도 MVC가 아닌 Razor Pages를 사용했을 수도 있음) 여기에 또 다른 해결책이 있습니다. CofigureServices ()의 Startup.cs에서 ID 옵션을 구성 할 수 있습니다.

services.Configure<IdentityOptions>(options =>
{
  options.User.AllowedUserNameCharacters =
  "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ@";
  options.User.RequireUniqueEmail = true;
});

이 항목에 대한 자세한 내용은 Microsoft Docs : https://docs.microsoft.com/de-de/aspnet/core/security/authentication/identity-configuration?view=aspnetcore-2.2