SQLMembershipProvider存储过程正在运行两次

时间:2015-10-28 16:51:21

标签: c# sql asp.net stored-procedures sitecore

所以我最近一直在修改MembershipProvider Sitecore使用,或者SqlMembershipProvider。微软发布了他们的源代码,所以我把它全部复制了,并添加了一些小的东西,比如密码历史等。在遇到这个奇怪的bug之前,一切似乎都很好。

基本上我将代码添加到登录页面的Login_OnClick事件中,这样如果用户重置了密码并分配了自动生成的密码,则会将其重定向到“更改密码”页面。

代码调用Membership.ValidateUser,后者又调用CheckPassword。如果密码错误或密码尝试失败,则会调用存储过程“dbo.aspnet_Membership_UpdateUserInfo”来更新相关变量(例如FailedPasswordAttemptCount)。 ValidateUser和CheckPassword是SqlMembershipProvider中包含的方法,并且未被我修改。

奇怪的是,相同的代码在同事计算机上正常工作,但在我的计算机上运行存储过程两次。我能够让它停止这样做的唯一方法是从我的Login_OnClick方法中删除此代码,但我不知道为什么修复它,也不知道为什么它在我的同事计算机上工作。

这是违规代码......任何想法?

protected void Login_OnClick(object sender, EventArgs e)
        {
            string username = ((TextBox) Login.FindControl("UserName")).Text;
            string password = ((TextBox) Login.FindControl("Password")).Text;
            if (Membership.ValidateUser(username, password))
            {
                try
                {
                    SqlConnectionHolder holder = null;
                    SqlDataReader reader = null;
                    try
                    {
                        var _sqlConnectionString = System.Configuration.ConfigurationManager.ConnectionStrings["core"].ConnectionString;
                        holder = SqlConnectionHelper.GetConnection(_sqlConnectionString, true);

                        SqlCommand cmd = new SqlCommand(@"SELECT * FROM dbo.PasswordReset WHERE " +
                                                        "username=@username",
                                                        holder.Connection);
                        cmd.Parameters.AddWithValue("@username", username);

                        int count = 0;
                        using (reader = cmd.ExecuteReader())
                        {
                            while (reader.Read())
                            {
                                count++;
                            }
                        }

                        //results were found in the password reset table so redirect them to the change password page
                        if (count > 0)
                        {
                            Response.Redirect("/sitecore/login/changepassword.aspx");
                        }
                    }
                    finally
                    {
                        if (holder != null)
                        {
                            holder.Close();
                            holder = null;
                        }
                    }

                }
                catch
                {
                    throw;
                }
            }
        }

更新:因此,经过测试,我们发现只有当您在用户名中包含域时才会出现该错误。如在,sitecore / admin无法正常工作,但管理员可以。我也发现它绝对不是我的代码问题,因为当我将默认源代码插入SQLMembershipProvider时,我仍然得到相同的错误。默认情况下,Sitecore的全新安装正常工作,即使它仍在使用SQLMembershipProvider。

所以我仍然有点迷失,但显然从源代码编译的SQLMembershipProvider和默认的SQLMembershipProvider sitecore使用的东西有所不同。

0 个答案:

没有答案