2014-01-20 3 views
12

나는이 tutorial에 Asp.Net ID 및 을 배우려고 노력했다MVC 5 : IdentityUser 클래스에서 내 사용자를 상속해야합니까?

모델 AppModels, CS 부분 MyUser 클래스 IdentityUser 클래스 상속 및 IdentityDbContext<MyUser>에서 MyDbContext 상속을 \에 엔티티 프레임 워크 코드 먼저 할일 모델 만들기 수업. 왜 그런가요?

내 웹 응용 프로그램 사용자의 모든 정보를 보유하는 User 클래스가 있고 그 클래스가 IdentityUser에서 상속해야한다고 가정하면 DbContextIdentityDbContext<User>에서 상속해야합니까? MVC 4에서 수행으로 일반 DbContext 클래스를 통해 IdentityDbContext<TClass>에서 inheritng dbcontext 클래스의 장점이 무엇인지 또한

+2

빠른 대답은 IdentityUser 및 IdentityDbContext에서 상속받은 경우 Microsoft의 UserStore 클래스를 사용하여 추가 작업없이 지속성을 관리 할 수 ​​있다는 것입니다. 그렇지 않으면 처음부터 자신 만의 UserStore를 구현할 수 있습니다. 너무 어렵지는 않습니다. – OdeToCode

답변

19

ASP.Net MVC 5.0은 플러그 앤 플레이를위한 OWIN의 된 구현을 사용합니다.

이에 대한 모든 사용자가 필요로하는 IUSER 인터페이스를 구현해야이

FROM Scott Allen Article

enter image description here

IUSER

사용자 객체 위해 설계된 인터페이스의 몇 가지가 있습니다 최소한 ID와 이름이 있어야합니다. 의 가장 주목할만한 부분 IUser는 string 유형의 Id 속성입니다. 문자열은 GUID가 일 때 잘 작동하지만 SQL Server와 같이 일반적으로 키에 정수를 사용할 때 약간 까다로울 수 있습니다. 향후 게시물에 대한 자세한 내용. 코어 신원 어셈블리

IUserStore

의 I * 저장 인터페이스 기능의 다양한 수준을 제공하기 위해 고려된다.

IUserStore는 CRUD (사용자 권한 부여) 기능을 만들고, 검색하고, 업데이트하고 삭제하는 사용자에게 최소한의 기능을 정의합니다. 웹 사이트에서 사용자가 암호로 로컬 계정을 만들도록 허용하려는 경우 을 사용하면 IUserPasswordStore ( IUserStore)를 구현하는 구성 요소가 필요합니다. 타사 로그인 (Twitter 및 Facebook의 경우 예)의 경우 IUserLoginStore에 추가하고 소유권 주장 저장에는 IUserClaimStore가 있습니다. 또한 위의 클래스 다이어그램에 표시되지 않은 역할 (IRole, IUserRoleStore 등)에 대한 인터페이스 모음은 입니다. 에 대한 역할 토론에 대한 토론이 시작됩니다.

UserManager

UserManager는 구체적인 클래스이며 사용자 정보 작업을위한 도메인 로직을 제공하는 UserManager입니다. UserManager는 암호를 해시 할시기, 사용자의 유효성을 확인할시기 및 클레임 관리 방법을 알고 있습니다.

UserManager에는 몇 가지 확장 점이 있습니다. 예를 들어, 관리자는 사용자 정의 유효성 검사기 (IIdentityValidator를 구현하는 모든 개체), 사용자 지정 암호 유효성 검사기 및 사용자 지정 암호 해더를 설정하는 데 사용할 수있는 여러 가지 속성 . 기본 확장 점은 IUserStore를 구현하는 모든 객체를 전달할 수있는 UserManager 생성자를 통해 발생합니다. UserManager를 사용하여 SQL Server에 저장된 사용자 정보를 관리하려는 경우 나중에 작성하기 위해 미리 작성된 클래스를 살펴볼 것이지만 IUserStore를 작성하여 문서 데이터베이스 또는 기타 도구로 작업하기 쉽습니다 형태의 저장.

IUserStore는 사용자 암호 작업 방법을 모르므로 IUserPasswordStore 만 암호를 알고 있습니다. UserManager는 다른 핵심 인터페이스를 알고 있으며 생성자에 지정된 저장소 객체의 기능을 사용하여 작업하려고합니다. 예를 들어, FindByIdAsync를 사용하면 UserManager가 사용자 저장소를 사용하여 ID별로 사용자를 쿼리 할 수 ​​있지만 FindAsync (사용자 이름과 암호가 필요함)를 호출하고 기본 저장소가 IUserPassword 저장소 인터페이스를 구현하지 않으면, UserManager는 강제로 예외를 던질 것입니다.

클레임에 이르기까지 사용자에서 암호까지 모든 것에 대해 하나의 구체적인 클래스를 사용하는 것은 까다로운 일이며 절충안을 작성해야합니다. 우리는 향후 게시물의 일부 절충 사항에 대해서도 살펴볼 것입니다.

편집 : 체크 아웃 Implementing ASP.Net Identity

이제 ASP.Net 정체성은 문자열 전에, 사용자 아이디 문자열

+0

ID 부분에 대해 IUser는 사용자 클래스에서 재정의하고 새 사용자를 만드는 경우 string 유형의 ID를가집니다.이 ID는 어떻게 할당됩니까? – Cybercop

+1

Identity 프레임 워크의 다음 버전에 대한 시험판 NuGet을 살펴볼 수 있습니다. 이 릴리스에서는 IdentityUser 을 사용합니다. TKey는 기본 키 유형을 지정하고 int를 사용할 수 있습니다. – OdeToCode

2

IdentityDbContext <에게 예였다> 클래스는 DbContext에서 상속되는 클래스입니다 일반 IdentityUser<TKey> 지원 역할 및 사용자를위한 준비된 DbSets을 제공합니다. 여기

참조 클래스 문서 : http://msdn.microsoft.com/en-us/library/microsoft.aspnet.identity.entityframework.identitydbcontext%28v=vs.111%29.aspx

예, 사용자 DTO는 IdentityUser에서 상속해야하고 사용자와 연결된 데이터베이스에서 원하는 추가 필드가 클래스에 추가 할 수 있습니다.

이렇게하면 사용자와 관련된 데이터베이스에 필드를 추가하는 것이 훨씬 쉬워지고 Entity Framework 마이그레이션 및 데이터베이스 초기화를 사용하는 경우 이제 DbContext에서 전체 Identity 데이터베이스를 생성 할 수 있습니다.