마이크로소프트를 구성합니다.사용자 이름으로 전자 메일 주소를 허용하는 AsNet.Identity
저는 새로운 애플리케이션을 만드는 중이고 Microsoft의 EF6-rc1을 사용하기 시작했습니다.애스넷. 아이덴티티.코어 1.0.0-rc1, 마이크로소프트.애스넷. 아이덴티티.엔티티 프레임워크 1.0.0-rc1, Microsoft.애스넷. 아이덴티티.Owin 1.0.0-rc1 등 어제 RTM 릴리즈와 함께 오늘 저녁 NuGet을 통해 RTM으로 업데이트했습니다.
지금까지 수행한 작업에 대한 몇 가지 코드 변경을 제외하고는 앱에 대한 로컬 사용자 계정을 생성하기 전까지는 모든 것이 잘 진행되는 것 같았습니다.
이전에는 릴리스 후보와 함께 사용자 이름 형식의 전자 메일 주소에 대해 작업했지만, 이제 사용자 이름에 대한 전자 메일 주소를 가진 사용자를 만들 때 다음과 같은 확인 오류가 발생합니다.
사용자 이름 xxxxx@xxxx.com 이 잘못되었습니다. 문자 또는 숫자만 포함할 수 있습니다.
지난 한 시간 동안 솔루션이나 구성 옵션에 대한 설명서를 찾았지만 소용이 없었습니다.
사용자 이름에 대한 전자 메일 주소를 허용하도록 구성할 수 있는 방법이 있습니까?
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 };
}
이메일이 아닌 사용자 이름을 실제 이름으로 만들기 위해 코드를 변경하려고 했을 때 시스템에 동일한 오류 메시지가 표시됩니다. "사용자 이름 ABC DEF는 유효하지 않습니다. 문자 또는 숫자만 포함할 수 있습니다."AllowedUserNameCharacters에 공백 문자(마지막에 있는 나의 경우)를 추가하는 문제를 해결했습니다.
나는 Asp를 사용합니다.Net Core 2.2 및 VS2017
이건 내 코드야
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 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 };
}
AspNet에 있는 사람들을 위해.신원.Core 2.1 이상에서는 사용자 관리자의 이러한 검증자가 읽기 전용입니다.기본적으로 사용자 이름으로 이메일 주소를 사용할 수 있지만 사용자 이름의 문자를 추가로 사용자 지정해야 하는 경우 Startup.cs 에서 다음과 같이 사용할 수 있습니다.
public void ConfigureServices(IServiceCollection services)
{
services.AddIdentity<ApplicationUser, IdentityRole>(options => {
options.User.AllowedUserNameCharacters = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-._@+/";
});
// ... etc
}
(레거시적인 이유로 '/'가 필요했습니다.)
ASP.Net 웹 양식을 사용하고 있으며 이를 수행하려면 IdentityModels.vb/cs 파일을 열고 Public Class User Manager에서 다음과 같이 하십시오.
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
나만의 ApplicationUserManager: UserManager 클래스를 코딩하는 것이 나에게는 통하지 않았기 때문에(아마도 나는 MVC가 아닌 레이저 페이지를 사용할 것이다), 여기 다른 솔루션이 있습니다.Startup.cs 의 ConfigureServices()에서 ID 옵션을 다음과 같이 구성할 수 있습니다.
services.Configure<IdentityOptions>(options =>
{
options.User.AllowedUserNameCharacters =
"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ@";
options.User.RequireUniqueEmail = true;
});
Microsoft 문서에서 이 주제에 대한 자세한 내용은 https://learn.microsoft.com/de-de/aspnet/core/security/authentication/identity-configuration?view=aspnetcore-2.2 을 참조하십시오.
IdentityConfig.cs 을 찾을 수 없는 경우 계정 컨트롤러 생성자를 이 코드로 교체합니다.
public AccountController(UserManager<ApplicationUser> userManager)
{
UserManager = userManager;
UserManager.UserValidator = new UserValidator<ApplicationUser>(UserManager)
{
AllowOnlyAlphanumericUserNames = false
};
}
저의 경우 인증으로 작업하는 리포지토리 클래스가 있었는데, "-" 내부 사용자 이름을 사용할 수 없었습니다.수정 사항은 여기 생성자 내부에 있었습니다.
//-------------------------------------------------------
public AuthRepository()
//-------------------------------------------------------
{
_ctx = new AuthContext();
_userManager = new UserManager<IdentityUser>(new UserStore<IdentityUser>(_ctx));
_userManager.UserValidator = new UserValidator<IdentityUser>(_userManager)
{
AllowOnlyAlphanumericUserNames = false
};
}
요즘은 대부분의 사용자 이름이 이메일이기 때문에 저도 이것에 얽매였습니다. 하지만 저는 별도의 이메일 필드의 추론을 이해할 수 있습니다.이것은 전적으로 제 생각입니다. 마이크로소프트의 발언권을 찾을 수 없었기 때문입니다.
As Identity는 순수하게 누군가를 식별하기 위한 것이므로 식별하기 위해 이메일을 가질 필요는 없지만 이메일이 ID의 일부를 형성하기 때문에 저장할 수 있습니다.비주얼 스튜디오에서 새 웹 프로젝트를 만들면 인증 옵션이 제공됩니다.
MVC와 같은 비어 있지 않은 프로젝트 유형을 선택하고 인증을 "개별 계정"으로 설정하면 사용자 관리를 위한 기본 기반이 제공됩니다.그 중 하나는 App_Start\IdentityConfig.cs 에서 다음과 같은 하위 클래스를 포함합니다.
// Configure the application user manager used in this application. UserManager is defined in ASP.NET Identity and is used by the application.
public class ApplicationUserManager : UserManager<ApplicationUser>
{
public ApplicationUserManager(IUserStore<ApplicationUser> store)
: base(store)
{
}
public static ApplicationUserManager Create(IdentityFactoryOptions<ApplicationUserManager> options, IOwinContext context)
{
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
};
}
//N.B rest of code removed
}
Microsoft는 더 복잡한 사용자 이름을 저장하려고 하므로(AlphaNumeric 사용자 이름만 허용 = false 참조) 신호가 혼합되어 있습니다.
이것이 기본 웹 프로젝트에서 생성된다는 사실은 사용자 이름 필드에 전자 메일을 입력할 수 있는 Microsoft의 좋은 지시사항/방향을 제공합니다.App_Start\Startup 내에서 정적 생성 방법을 사용하기 때문에 깨끗합니다.Microsoft에서 응용 프로그램을 부트스트랩할 때 Auth.cs .OWIN 컨텍스트.
이 방법의 유일한 단점은 이메일을 두 번 저장하게 된다는 것입니다.그건 좋지 않습니다!
2014년 3월에 출시된 ASP.NET Identity 2.0.0은 프레임워크에 이 기능을 추가했습니다.
공지사항: http://blogs.msdn.com/b/webdev/archive/2014/03/20/test-announcing-rtm-of-asp-net-identity-2-0-0.aspx
계정 확인을 포함한 전체 예제 및 튜토리얼: http://www.asp.net/identity/overview/features-api/account-confirmation-and-password-recovery-with-aspnet-identity
계정 컨트롤러에서 IOC(StructureMap 사용 중)를 사용하는 경우 사용자 관리자가 전달될 때 Hao Kung이 언급한 수정 사항을 적용해야 합니다.IOC 설정에서 할 수 있는 방법이 있을 수도 있지만, 저는 그 방법을 모릅니다.
public AccountController(ApplicationUserManager userManager)
{
_userManager = userManager;
_userManager.UserValidator = new UserValidator<ApplicationUser>(_userManager)
{
AllowOnlyAlphanumericUserNames = false,
RequireUniqueEmail = true
};
저는 같은 문제에 직면했지만, 결국 시공자가 아닌 제 방법에 아래 부분을 추가하여 문제를 해결했습니다.
public void MyMethod(){
UserManager<ApplicationUser> manager = new UserManager<ApplicationUser>(new UserStore<ApplicationUser>(new ApplicationDbContext()));
// Configure validation logic for usernames
manager.UserValidator = new UserValidator<ApplicationUser>(manager)
{
AllowOnlyAlphanumericUserNames = false,
RequireUniqueEmail = true
};
}
언급URL : https://stackoverflow.com/questions/19460078/configure-microsoft-aspnet-identity-to-allow-email-address-as-username
'programing' 카테고리의 다른 글
배열에서 중복 값을 찾아 반환하는 방법 (0) | 2023.05.27 |
---|---|
bash : 잘못된 대체 (0) | 2023.05.27 |
express.js에서 HTTPS 사용 (0) | 2023.05.22 |
Python Pandas:열이 특정 값과 일치하는 행 색인 가져오기 (0) | 2023.05.22 |
Excel 오류 1004 "WorksheetFunction 클래스의 속성...을(를) 가져올 수 없습니다."가 일관성 없이 나타납니다. (0) | 2023.05.22 |