2011-12-22 22 views
1

私は私が作成したユーザ名とパスワードでログインすることができませんでしたしかし、私は、コードに足を踏み入れとMembership.ValidateUserリターンを見つけ、ログインポータル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を使用しましたここで

はコードです:

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

MembershipProvider.ValidateUserはboolを返します。おそらく、nullではなくfalseを返したことを意味します。 – 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

あなたが最初にすべきことは、ユーザーがデータベースに存在するかどうかを確認しています。 ローカルとプロダクションの2つの異なるデータベースを使用している可能性があります。 AspNetSqlMembershipProviderの接続文字列を表示できますか?

* EDIT * 私は、接続文字列とは専門家でないが、あなたがSQLコンパクトDBに対して実行されているように私には思えます。私はvsまたはSQLマネージャからサーバーエクスプローラを使用してdbに接続し、aspnet_Usersテーブルをチェックし、ユーザーが存在するかどうかを確認します。

ローカルまたはプロダクションマシンでテストしていますか?プロダクションであれば、ローカルで動作しましたか?

+0

\t \t

+0

テーブル "aspnet_Membership"の "IsApproved"フィールドです。一度それが本当であれば、すべてがうまくいきます。デフォルトではfalseです。 –