2011-03-06 5 views
1

로그인 할 때 "사용자 이름"으로 이메일 주소를 사용하고 있습니다. 사용자가 로그인 할 때 생성 된 User 객체에는 올바르지 않은 이름으로 이메일 주소가 있습니다. 실제 이름은 DB의 다른 필드입니다. 전자 메일 주소로 로그인하고 인증 한 다음 사용자 개체에 올바른 이름을로드하려면 어떻게합니까?이메일 주소가있는 Asp.Net 인증

사용자 정의 MembershipProvider 및 RoleProvider와 함께 폼 인증을 사용하고 있습니다.

편집 다음은

내가 이메일 주소와 비밀번호로 사용자를 검증하는 사용자 정의는 MembershipProvider를 명확히한다. 기본 로그인 컨트롤에 의해 호출되고 web.config에 등록됩니다.

<asp:Login ID="AdminLogin" runat="server" MembershipProvider="AdminMembershipProvider"> 
</asp:Login> 

의 Web.config : 그냥이 내 사용자가 제대로 로그인으로

<authentication mode="Forms"> 
     <forms loginUrl="Default.aspx" /> 
    </authentication> 
    <membership defaultProvider="AdminMembershipProvider"> 
     <providers> 
     <clear /> 
     <add name="AdminMembershipProvider" 
      type="AdminMembershipProvider" 
      connectionStringName="EvalSysConnectionString" 
      /> 

     </providers> 
    </membership> 

. 그러나 전자 메일 주소의 Context.User.Identity.Name을 반환합니다. 나는 이름과 성을 DB에 저장하고 이것을 이름으로하고 싶다.

필자는 Global.asax 파일을 만들고 PostAutheticateRequest 메서드를 재정 의하여이를 나타낼 것 같은 다양한 게시물을 읽었습니다. 그러나 나는이 전략을 어떻게 진행해야할지 모른다.

<%@ Application Language="C#" %> 

<script runat="server"> 

    protected void Application_PostAuthenticateRequest() 
    { 
     string test = HttpContext.Current.User.ToString(); 
    } 

</script> 

내 질문은 너무 모호했습니다. 나는이 질문에 너무 빠져서 좋은 질문을 쓰는 방법을 모른다.

+0

질문에 약간의 의미가 있습니다 .... 시도해 보셨습니까? –

+0

미치와 동의하십시오. 당신은 당신이 시도한 것을 게시하거나 MembershipProvider가 어떻게 불려지는지 등을 게시해야합니다. – mfanto

답변

1

지금까지 해본 내용을 정확히 수행 한 다음 사용자 이름, 주소 등을 Profile 개체에 저장합니다.다음

<profile> 
    <providers> 
    <clear /> 
    <add name="SqlProvider" 
     type="System.Web.Profile.SqlProfileProvider" 
     connectionStringName="SqlServices" 
     applicationName="SampleApplication" 
     description="SqlProfileProvider for SampleApplication" /> 
    </providers> 
    <properties> 
    <add name="Name" /> 
    </properties> 
</profile> 

그리고/검색과 같이 설정하십시오 :

txtName.Text = Profile.Name; 
Profile.Name = txtName.Text; 
+0

이것이 내가 가기로 결심 한 방식입니다. 내 목적에 따라 구현하는 것이 가장 쉬운 방법 이었지만 예상보다 많은 작업이 필요했습니다. 고마워 지미! – ChrisOPeterson

2

내가 묻는 것은 다음과 같습니다. Context.User.Identity.Name 속성을 변경하여 사용자 이름이 아닌 다른 것을 표시 할 수 있습니까?

편집

그것이 읽기 전용이며이를 변경할 수있는 방법으로 사용자 이름으로 설정되어 재산 Context.User.Identity.Name의 구현을 사용 할 수 없습니다.

처음과 마지막을 Context.User.Identity.Name의 값을 기반으로 검색을 할 수있는 데이터베이스에 (코드 또는 쿼리) 저장 프로 시저를 호출하고 반환하는 방법을 쓸 수

빠르고 쉬운 솔루션 . 결과를 Session 변수에 저장하거나 Profile 개체를 사용할 수 있습니다 (아래 설명 참조).

대체 솔루션

당신은 IIdentity 당신 자신의 구현을 작성할 수 있습니다. 그것은 내가 한 적이없는 일이기 때문에 기여할 발췌 문장이 없습니다. 그러나이 link은 시작할 장소를 제공해야합니다. IIdentity 구현에 추가 속성을 추가하고 참조 할 때마다 자신의 구현에 Context.User.Identity을 캐스팅하지 않으면 사용자를 식별 할 수있는 고유 한 방법을 잃어 버리기 때문에이 솔루션을 사용할 때는주의해야합니다.

희망이 있습니다.

+0

그게 정확히 제가 요구하는 것이 아닙니다. 사용자 이름과 암호 인증은 전자 메일 주소와 암호에 대해 발생합니다. 그런 다음 Context.User.Identity.Name에 저장된 이름으로 저장하려는 사용자의 이름과 성을 저장합니다. 이해가된다면 .... – ChrisOPeterson

+1

그러나 Context.User.Identity.Name은 읽기 전용입니다. 아래에서 언급 한 것처럼 데이터베이스 조회를 수행하고 세션 변수 또는 프로필 객체에 저장하여 필요에 따라 정보를 가져 오는 것이 좋습니다. – rgmills

+0

나는 지금 당장 그것에 대해 연구 중이다. 그리고 그것은 최선의 방향으로 보인다. 왜 asp.net 로그인 구성표에 많은 다른 부분이 있습니까? 그게 나 혼란에 빠져있어! – ChrisOPeterson

1

당신은 확실히 프로필 공급자를 사용으로 볼 수 있었다

이 일부 구성 (의 Web.config)를 추가하는 것만 큼 쉽습니다 지미가 제안한 것처럼. 또는 IPrincipal을 구현하고 PostAuthenticateRequest 이벤트에 HttpContext.User 속성을 설정할 수 있습니다.

기본적으로, 당신은 단지

 var userName = Database.GetUserName(httpContext); 
     httpContext.User = new GenericPrincipal(new GenericIdentity(userName, "FORMS"), new[] {"UserRole1"}); 

같은 것이 첫 번째 줄은 사용자 이름을 사용하려면 사용자의 DB에 대한 호출의 예입니다 않습니다. 두 번째 줄은 여기에 몇 가지 VB 코드이 정보에서 원금과 정체성이 다음 HttpContext

0
Dim username As String = Membership.GetUserNameByEmail(txtUsername.Text) 
If (Membership.ValidateUser(username, txtPassword.Text)) Then 

의 사용자 속성에 할당 만듭니다. 그것은 회원 제공자의 란을 유지하는 것처럼 보입니다. 기본적으로 사용자는 고유 한 이메일 주소를 입력하고 이메일 주소를 사용하여 사용자 이름을 가져올 수 있습니다. 그런 다음 유효성 검사 방법을 사용하여 사용자 이름과 암호로 사용자를 인증하십시오.

당신은 어떻게 생각하십니까?