首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Membership.ValidateUser返回: null

Membership.ValidateUser返回: null
EN

Stack Overflow用户
提问于 2011-12-22 22:08:20
回答 1查看 1.4K关注 0票数 1

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

代码语言:javascript
运行
复制
<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。

以下是代码:

代码语言:javascript
运行
复制
   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

再次更新:更多代码,

代码语言:javascript
运行
复制
    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);

                }
            } 

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

EN

回答 1

Stack Overflow用户

发布于 2011-12-22 22:14:10

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

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

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8610270

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档