尽管成功登录,ASP.NET Forms身份验证始终为false

时间:2017-05-22 19:00:12

标签: c# mysql asp.net authentication

我正在尝试学习如何使用ASP.NET进行用户身份验证。我已经设置了以下简单的网站来试验它,但我遇到了一个登录循环,因为我的身份验证似乎总是返回'false'。

这是我的代码:

登录页面有一个名为Login1的控件。

这是背后的代码;

protected void ValidateUser(object sender, EventArgs e)
{
    int userId = -1;

    string connectionString = ""; // I have a connection string here that I left out of this post.
    MySqlConnection conn = new MySqlConnection(connectionString);

    using (conn)
    {            
        using (MySqlCommand cmd = new MySqlCommand("Validate_User"))
        {
            try
            {
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.Parameters.AddWithValue("Username", Login1.UserName);
                cmd.Parameters.AddWithValue("Pass", Login1.Password);
                cmd.Parameters.Add("@ireturnvalue", MySqlDbType.Int32);
                cmd.Parameters["@ireturnvalue"].Direction = ParameterDirection.ReturnValue;
                cmd.Connection = conn;
                conn.Open();

                cmd.ExecuteScalar();
                userId = Convert.ToInt32(cmd.Parameters["@ireturnvalue"].Value.ToString());
                switch (userId)
                {
                    case -1:
                        Login1.FailureText = "DB call failed, contact System Admin.";
                        break;
                    case 0:
                        Login1.FailureText = "Username and/or password is incorrect.";
                        break;
                    case 1:
                        FormsAuthentication.SetAuthCookie(Login1.UserName, false);
                        FormsAuthentication.RedirectFromLoginPage(Login1.UserName, Login1.RememberMeSet);
                        break;
                    case 2:
                        firstLogin = true;
                        FormsAuthentication.SetAuthCookie(Login1.UserName, false);
                        FormsAuthentication.RedirectFromLoginPage(Login1.UserName, Login1.RememberMeSet);                            
                        break;
                }
            }
            catch (Exception ex)
            {
                lblError.Text = ex.ToString();
            }
            finally
            {
                cmd.Dispose();
                conn.Close();
            }
        }
    }
}

我已经测试了登录成功,我的测试用户最终在switch语句中的'case 2'。根据我的理解,这应该设置cookie,然后将用户重定向回他们试图去的页面。

在这种情况下,那将是我的Members.aspx页面:

protected void Page_Load(object sender, EventArgs e)
{
    if (!this.Page.User.Identity.IsAuthenticated)
    {
        FormsAuthentication.RedirectToLoginPage();
    }
}

因此,这应该检测用户是否经过身份验证,如果不是,则将其重定向到登录页面。这是问题出现的地方,因为它总是返回false,因此总是重定向回登录页面。

根据相关问题,以下是我知道的一些重要设置:

在Web.config中:

<authentication mode="Forms">
  <forms defaultUrl="~/Default.aspx" loginUrl="~/Login.aspx" slidingExpiration="true" cookieless="UseCookies" timeout="2880"/>    
</authentication>

此外:

<modules>
  <remove name="FormsAuthenticationModule" />
  <remove name="FormsAuthentication" />
</modules>

有些人建议在Web.config中添加以下内容,但是当我添加它时,我遇到了'localhost重定向了你太多次'错误:

<authorization>
  <deny users="?"/>
</authorization>

我在相关问题上尝试了很多建议,其中很多都让我修改了一些Web.Config设置(比如设置)或一些使用Membership.ValidateUser函数,这不是什么我跟着的教程让我这么做。

供参考,这是我遵循的教程:ASP.NET Authentication Tutorial.

我怀疑我在验证方面做错了,但我不确定除了使用FormsAuthentication.SetAuthCookie(Login1.UserName,false)方法还应该做些什么。

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:1)

  

即,我们需要指示IIS 7.0在处理请求时使用ASP.NET的FormsAuthenticationModule和UrlAuthorizationModule。将该元素添加到Web应用程序的根Web.config文件中,删除FormsAuthenticationModule和UrlAuthorization模块的现有定义,并使用ASP.NET的版本重新添加它们

来源:http://www.4guysfromrolla.com/articles/122408-1.aspx

minimize: true/false

这是一篇旧文章,可能适用也可能不适用。我的web.config中没有这个(删除或添加),表单auth工作正常。 (这可能取决于&#39;提供商&#39;?)