我正在尝试学习如何使用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)方法还应该做些什么。
非常感谢任何帮助!
答案 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;?)