登录控制身份验证不使用用户定义的数据库

时间:2014-06-12 05:37:17

标签: c# asp.net sql

我设置了一个登录控件,用于我的Web应用程序并遇到问题。我正在尝试使用用户定义的sql数据库验证登录控制,但它显示错误 inavalid列名'密码'。我几乎尝试了所有东西,但它没有用。我不知道我在哪里误会。如果有人可以帮我解决。这是我的代码。

protected void login1_Authenticate(object sender, AuthenticateEventArgs e)
{
    SqlConnection mycon = new SqlConnection(ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString);
    SqlDataAdapter myadp = new SqlDataAdapter();
    myadp.SelectCommand = new SqlCommand();
    myadp.SelectCommand.Connection = mycon;
    mycon.Open();
    myadp.SelectCommand.CommandText = "select *from UserData where username=@uname and password=@pswd";
    myadp.SelectCommand.Parameters.AddWithValue("@uname",login1.UserName);
    myadp.SelectCommand.Parameters.AddWithValue("@pswd",login1.Password);
    SqlDataReader dr;
    dr = myadp.SelectCommand.ExecuteReader();
    if (dr.Read())
    {
        e.Authenticated = true;
        Session["username"] = login1.UserName;
        Response.Redirect("~/Home.aspx");
    }
    else
    {
        Response.Write("<Script>alert('Error')</Script>");
    }  
    mycon.Close();
}

1 个答案:

答案 0 :(得分:0)

对于您的第一个问题,评论显示您的数据库中没有password字段 对于第二个问题: - 您正在检查if(dr.Read)您应该检查if(dr.HasRows)。你不需要在会话中存储用户名。正如@chinz所说,你可以通过User.Identity.Name得到它。也在你的web.config

<system.web>
        <authentication mode="Forms">
                   <forms loginUrl="login.aspx" name="login" protection="All"/>
        </authentication>
        <authorization>
                <deny users="?"/>
       </authorization>
</system.web>

这将提高您网页的安全性。有关正确身份验证方法,请参阅msdn docsthis