2

방금 ​​ASP.NET MVC를 배우기 시작했습니다. 기본적으로 SqlMembershipProvider을 사용하는 표준 프로젝트 템플릿으로 만든 프로젝트에서 작업하고 있습니다. 이렇게하면 회원 정보를 보유하기 위해 프로젝트에 ASPNETDB.mdf 데이터베이스가 자동으로 생성됩니다. 이 데이터베이스에 저장된 회원을 실제 응용 프로그램 데이터와 어떻게 연관시킬 수 있습니까?ASP.NET MemberShipProvider의 사용자에게 내 응용 프로그램 데이터를 연결하려면 어떻게합니까?

this.User.Identity.Name을 사용하여 작업 방법에서 현재 사용자의 이름을 참조해야만 응용 프로그램의 데이터베이스에서 사용자 특정 정보를 저장하거나 검색 할 때 키로 사용해야합니까? 또는 대신 this.User.Identity.UserId을 사용해야합니까? 나는 항상 정수 기반 ID가 문자열 또는 GUID 기본 ID를 검색하는 것이 훨씬 빠르다고 생각했습니다. 그러나 aspnet_Users 테이블의 기본 키는 GUID 필드입니다.

this.userthis.HttpContext.User 사이에 차이가 있습니까? 이 속성에서 반환 된 IPrincipalMembership.GetUser()에서 반환 된 MembershipUser일까요? 이들의 차이점은 무엇입니까?

또한 회원 정보를 응용 프로그램 데이터베이스와 별도의 데이터베이스에 보관하는 것이 가장 좋습니까? 아니면 하나의 데이터베이스에 함께 병합해도 괜찮습니까?

답변

1

질문에 대한 몇 가지 요소, 몇 점있다 : 그것은 일반적으로 더 사용하기 효율적으로

내가 일반적으로 ID 이름을 사용. get user function은 데이터베이스에서 전체 사용자 데이터를 가져와 마지막 액세스 시간을 업데이트합니다. IPrinciple은 이것을 요구하지 않으며 메모리 데이터에서 사용합니다. 따라서 username 속성은 더 빠르고 쉽게 사용할 수 있습니다. 주요주의 사항은 사용자가 사용자 이름을 변경할 수 있도록 허용 할 수있는 경우입니다.이 경우 ID가 더 적합합니다.

사용자 관련 레코드가 많아서 문제가되는 것 같습니다. 맞습니다. 정수는 조회하는 것이 가장 빠릅니다. 대량의 데이터가있는 경우 사용자를 extending the membership 제공자로 매핑하거나 매핑 테이블을 추가하여 정수로 매핑 할 수 있습니다.

this.User 대 HttpContext.User는 차이가 없습니다.

+0

아니 내 첫 번째 ASP.NET 애플 리케이션입니다. 그래서 나는 많은 사용자를 전혀 갖지 않을 것이다. 나는 UserName 또는 UserID에 의해 그것들을 찾는 것이 좋을 것이라고 확신한다. 나는 그것이 어떻게 작동하는지 이해하려고 노력하고있다. 감사! –

1

기본 템플릿은 일부 폼 인증/멤버십 기능에 대한 래퍼를 만드는 Models 폴더의 "AccountModel"을 제공해야합니다. 이를 확장하고 현재 HttpContext에 저장된 IPrincipal 인 현재 "HttpContext.Current.User"를 반환하는 함수를 추가 할 수 있습니다. 그 이름 속성을 사용하면 사용자 이름으로 회원 정보를 쿼리하여 회원 데이터를 얻을 수 있습니다 (IPrincipal은 사용자 이름, 역할 등과 같은 기본 정보 만 저장합니다. MembershipUser는 db에서 가져온 다른 모든 데이터를가집니다).

SqlMembershipProvider는 작은 프로젝트에 비해 매우 진절머리 나며 제한적이며 ... 동시에 복잡합니다. 지금은 2000+ 계정이있는 사이트에서 사용하고 있으며 사용자 정의하려는 경우 pita입니다. formauthentication을 사용하고 Membership 쓰레기를 없애기 위해 직접 작성하는 것이 더 좋습니다 (그물에 많은 예제가 있습니다). 나는 지금 내가 하나를 썼다면 좋겠다.

+1

모든 점에서 나는 동의하지 않습니다. 매우 높은로드 사이트에 대해서는 멤버 자격 공급자를 사용했습니다.소수의 사용자에게 문제가 발생하면 서버에 문제가 있다고 말할 수 있습니다. 회원 공급자의 요점은이 같은 반복적 인 작업을하지 않아도되고 개발의 첫 번째 부분을 완료하는 데 도움을주는 것입니다. 그것을 확장하기를 원한다면 너무 쉽게 ... – Timbo

+0

AccountModel.cs에서 기본적으로 생성되는 AccountMembershipService 및 FormsAuthenticationService 클래스는 실제로 MembershipProvider 및 FormsAuthentication 클래스의 기능 만 래핑합니다. 그래서 나는 정말로 뒤에서 무슨 일이 벌어지고 있는지 이해하려고 노력하고 있습니다. 이것은 처음으로 ASP.NET 프로젝트이므로 SqlMembershipProvider의 제한 사항에 대해서는별로 신경 쓰지 않습니다. Http.Context.User는 항상 MemberShip.GetUser()와 동일한 사용자를 참조합니까? –

0

내가 SqlMembershipProvider를 사용하는 응용 프로그램에서 일반적으로 응용 프로그램 테이블과 동일한 DB에 테이블/sprocs를 저장 한 다음 외래 키를 사용하여 내 app 테이블을 사용자 테이블에 연결했습니다. 한 번은 이런 방식으로하지 않았습니다. 한 사용자 데이터베이스가 각각의 응용 프로그램 데이터베이스가있는 서로 다른 여러 응용 프로그램간에 공유 될 때였습니다.

+0

SqlMembershipProvider 테이블에 대한 관계를 만들기 시작하면 무언가를 깨뜨릴 수 있습니다. Fk를 설정할 때 삭제 또는 업데이트 규칙을 설정했기 때문에 사용자가 삭제되면 관련된 모든 응용 프로그램 정보도 삭제됩니다. –