2011-12-22 7 views
1

가 나는 이름과 내가 만든 암호를 사용하여 로그인 할 수 그러나 로그인 포털Membership.ValidateUser 반환 : 널 (null)

<membership defaultProvider="AspNetSqlMembershipProvider"> 
<providers> 
    <remove name="AspNetSqlMembershipProvider"/> 
    <add name="AspNetSqlMembershipProvider" requiresQuestionAndAnswer="false" enablePasswordRetrieval="false" enablePasswordReset="true" connectionStringName="MembershipDB" minRequiredPasswordLength="8" minRequiredNonalphanumericCharacters="1" applicationName="php" type="System.Web.Security.SqlMembershipProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/> 

을 만들 AspNetSqlMembershipProvider에 사용, 내가 코드에 들어갔다 및 Membership.ValidateUser 반환을 발견 : 널 (null)

protected void Login1_Authenticate(object sender, AuthenticateEventArgs e) 
    { 
      bool UserAuthenticated = false; 
      MembershipProvider AuthenticationProviderUsed = null; 
      RoleProvider roleProvider = Roles.Providers["SqlRoleProvider"]; 
      // Try authenticating the user against each membership provider 
      foreach (MembershipProvider membershipProvider in Membership.Providers) 
      { 
       try 
       { 
        if (membershipProvider.ValidateUser(loginInitial.UserName, loginInitial.Password)) // here got null. 
        { 

나는 데이터베이스를 확인 : 여기

는 코드입니다. 사용자 이름과 비밀번호가 모두 있습니다. 도움 주셔서 감사합니다.

업데이트 : false를 반환합니다.

다음으로 MembershipUser user = Membership.GetUser(loginInitial.UserName); 사용자 신고 null.

다시

업데이트 : 더 많은 코드,

protected void Login1_Authenticate(object sender, AuthenticateEventArgs e) 
    { 
      bool UserAuthenticated = false; 
      MembershipProvider AuthenticationProviderUsed = null; 
      RoleProvider roleProvider = Roles.Providers["SqlRoleProvider"]; 
      // Try authenticating the user against each membership provider 
      foreach (MembershipProvider membershipProvider in Membership.Providers) 
      { 
       try 
       { 
        if (membershipProvider.ValidateUser(loginInitial.UserName, loginInitial.Password)) 
        { 
         if (base.ConfigSettings.OperatingMode == ConfigurationSettingValues.OperatingModes.NoAccess) 
         { 
          if (!roleProvider.IsUserInRole(loginInitial.UserName, ConfigurationManager.AppSettings["AdminRole"])) 
          { 
           FormsAuthentication.SignOut(); 
           return; 
          } 
         } 

         MembershipUser usrInfo = Membership.GetUser(loginInitial.UserName); 
         if (membershipProvider.Name == "ActiveDirectoryMembershipProvider") 
         { 
          System.Web.Security.FormsAuthentication.SetAuthCookie(loginInitial.UserName, loginInitial.RememberMeSet); 
          UserAuthenticated = true; 
          AuthenticationProviderUsed = membershipProvider; 
          break; 
         } 
         else 
         { 

          Int16 daysSincePwdChange = Convert.ToInt16(DateTime.Now.Subtract(usrInfo.LastPasswordChangedDate).TotalDays); 

          System.Web.Security.FormsAuthentication.SetAuthCookie(loginInitial.UserName, loginInitial.RememberMeSet); 

          if (daysSincePwdChange > SecurityUtils.DefaultPasswordExpiryInDays || usrInfo.Comment == "ChangePassword") 
          { 
           e.Authenticated = false; 
           Response.Redirect("~/admin/ChangePassword.aspx?UserName=" + Server.UrlEncode(loginInitial.UserName)); 
          } 
          else 
          { 

           System.Web.Security.FormsAuthentication.SetAuthCookie(loginInitial.UserName, loginInitial.RememberMeSet); 
           UserAuthenticated = true; 
           AuthenticationProviderUsed = membershipProvider; 
           break; 
          } 
         } 

        } 
        else 
        { 
         // See if the user is locked out 
         MembershipUser user = Membership.GetUser(loginInitial.UserName); 
         if (user != null && user.IsLockedOut) 
         { 
          ErrorMessage.Text = "Your account is currently locked out. Please contact the system administrator."; 
         } 
         else 
         { 
          ErrorMessage.Text = "Invalid user name and/or password"; 
          //Response.Write("Invalid User Name or Password"); 
         } 
        } 
       } 

       catch (Exception ex) 
       { 
         LoggingLibrary.LogException(this.Logger, Context, ex, ex); 

       } 
      } 

eror 메시지 : 사용자가 데이터베이스에 존재하는 경우 "잘못된 사용자 이름 및/또는 암호"

+0

MemberhipProvider.ValidateUser는 bool을 반환합니다. 아마 false가 아닌 null이 리턴되었다는 것을 의미합니다. – santiagoIT

+0

[Membership.ValidateUser] (http://msdn.microsoft.com/en-us/library/system.web.security.membership.validateuser.aspx)는 true 또는 false 만 반환 할 수 있습니다. –

+0

전체 코드를 표시하지 않은 경우에도 ValidateUser가 true를 반환하는 경우 Membership.GetUser 만 호출한다고 가정합니다. 그래서 나는 ValidateUser가 false를 리턴하지만 Membership.GetUser가 null이라는 당신의 업데이트 된 질문을 이해하지 못한다. (당신은 정상적으로이 지점에 도착해서는 안된다.) –

답변

0

은 당신이해야 할 첫 번째 일은 확인한다 . 로컬 데이터베이스와 프로덕션 데이터베이스의 두 데이터베이스를 사용 중일 수 있습니다. AspNetSqlMembershipProvider에 대한 연결 문자열을 표시 할 수 있습니까?

* EDIT * 저는 연결 문자열 전문가가 아니지만 SQL 압축 데이터베이스에 대해 실행하고있는 것으로 보입니다. vs 또는 SQL 관리자에서 서버 탐색기를 사용하여 db에 연결하고 aspnet_Users 테이블을 검사하여 사용자가 있는지 확인합니다.

로컬로 테스트 중이거나 프로덕션 컴퓨터에서 테스트 중이십니까? 프로덕션 환경에서는 로컬로 작동합니까?

+0

\t \t

+0

"aspnet_Membership"테이블의 "IsApproved"필드입니다. 일단 그것이 사실이라면, 모든 것이 좋습니다. 기본적으로 false입니다. –