繁体   English   中英

Membership.ValidateUser返回:null

[英]Membership.ValidateUser return: null

我使用AspNetSqlMembershipProvider创建一个登录门户

<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"/>

但是我无法使用创建的用户名和密码登录,进入代码并找到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);

                }
            } 

错误消息是:“无效的用户名和/或密码”

您应该做的第一件事是检查用户是否存在于数据库中。 您可能正在使用两个不同的数据库,一个在本地,一个用于生产。 您可以显示AspNetSqlMembershipProvider的连接字符串吗?

*编辑*我不是连接字符串的专家,但在我看来,您是针对sql compact数据库运行的。 我将使用来自vs或sql manager的服务器资源管理器连接到数据库,并检查aspnet_Users表并验证您的用户是否存在。

您是在本地还是在生产机器上进行测试? 如果在生产中,它在本地工作吗?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM