2009-09-21 1 views
3

ASP.NET 폼 인증을 사용하면 전자 메일 주소와 암호를 어떻게 받아 들일 수 있습니까? 전자 메일 주소를 사용하여 사용자 이름을 찾은 다음 조회 한 사용자 이름과 암호로 로그인하십시오.ASP.NET 로그인 제어, 전자 메일로 로그인했지만 전자 메일이 사용자 이름이 아닙니다 (방법)?

우리는 직원 번호를 가진이 카드 시스템을 보유하고 있지만 아무도 그 번호를 기억할 수 없습니다. 분명한 것은 로그인 용 전자 메일 주소를 사용하는 것이지만 나머지 응용 프로그램은 사용자 이름 인 사용자 이름에 따라 다릅니다.

감사합니다. 코드 링크/예제가 훌륭합니다. 아직

Response.Write(Membership.GetUser().UserName);

이 모두 잘 작동 :

우리의 현재의 C# 솔루션에 null 참조 예외로 끝나는

string userName = Membership.GetUserNameByEmail(emailAddress);
bool successfulLogin = Membership.ValidateUser(userName, password);

+0

시도한 경우 : Response.Write (Membership.GetuserNameByEmail (emailAddress) .UserName)? –

답변

3

로그를 사용하지 마십시오 제어. 그냥 자신의 텍스트 상자를 넣어 자신의 인증 논리를 수행하십시오. 사용자가 성공하면 FormsAuthentication.RedirectFromLoginPage으로 전화하십시오.

이메일로 볼 수있는 한 사용자 이름을 입력하지 않아도 로그인됩니다.

docs을 참조하십시오.

+0

나는 이것을 말해야 만한다. 그것은 대단한 일입니다. 왜 기본 로그인 컨트롤이 실패하는지 잘 모르겠습니다. –

+0

Login 컨트롤이 사용자 텍스트 상자의 내용을 사용자 이름으로 사용하려고 할 수 있습니다. – recursive

+0

그래, 내가 로그인 텍스트 필드를 제거하고 불평, 그래서 그것을하고 있어야합니다. –

10

기존 로그인 컨트롤을 변경하지 말고 'Authenticate' 이벤트를 재정 의하여 새로운 사용자 지정 논리를 수행하십시오. 또한 FormsAuthentication.SetAuthCookie() 함수는 사용자 이름 문제를 무시하는 데 도움이됩니다.

은 내가이 컴파일하지 않은, 그러나 당신은 생각을해야합니다

private void OnAuthenticate(object sender, AuthenticateEventArgs e) 
{ 
    bool successfulLogin = false; 
    string userName = Membership.GetUserNameByEmail(Login1.UserName); //the email address 
    successfulLogin = Membership.ValidateUser(userName, Login1.Password); 

    if(successfulLogin) 
     FormsAuthentication.SetAuthCookie(userName, true); 

    e.Authenticated = successfulLogin; 
} 
+0

내가 무슨 생각을했는지 모르겠다. 나는이 질문을 더 신중하게 읽었으며 이것은 내 것보다 훨씬 더 나은 대답이다. – womp

+0

내 유일한 문제는 Membership.GetUser()가 null이라는 것입니다. Response.Write (Membership.GetUser(). UserName) 같은 것을 할 수 있어야합니까? –

+0

이후 SAME 요청 또는 후속 요청에서 null입니까? "HttpContext.Current.User.Identity"속성은 기본 제공 asp.net 모듈에 의해 채워 지므로 인증 후 다음 요청 때까지 업데이트되지 않습니다. –

1

나는 똑같은 문제에 봉착했습니다.

Response.Write(HttpContext.Current.User.Identity.Name); 

을하지만 이것은 현재 사용자가 null 하더군요 : 다음 페이지가로드에이 작품을 잘

Response.Write(Membership.GetUser().UserName); 
0

그것은 내 솔루션의 날에 대한 확인, LoginUser는 로그인 컨트롤의 이름입니다.

protected void LoginUser_Authenticate(object sender, AuthenticateEventArgs e) 
{ 
    bool successfulLogin = false; 
    string userName = Membership.GetUserNameByEmail(LoginUser.UserName); //the email address 
    LoginUser.UserName = userName; //+++ Set username recovered by email. 
    successfulLogin = Membership.ValidateUser(userName, LoginUser.Password); 

    if (successfulLogin) 
     FormsAuthentication.SetAuthCookie(userName, true); 

    e.Authenticated = successfulLogin; 
} 
관련 문제