我的登录控件不再按预期工作。它从数据库中提取用户名和密码,然后将用户重定向到Home.aspx。遗憾地重定向并没有发生。它确实将此添加到网址的末尾,但没有任何反应
ReturnUrl=%2fHome.aspx
这是短代ASP代码
<asp:Login ID="Login1" runat="server" OnAuthenticate= "ValidateUser"
DestinationPageUrl="~/Home.aspx"> </asp:Login>
加上.cs代码
protected void ValidateUser(object sender, AuthenticateEventArgs e)
{
SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["DB_CONNE"].ConnectionString);
con.Open();
SqlCommand cmd = new SqlCommand("SELECT * FROM Users WHERE Username =@Username and Password=@Password", con);
cmd.Parameters.AddWithValue("@Username", Login1.UserName);
cmd.Parameters.AddWithValue("@Wachtwoord", Login1.Password);
SqlDataAdapter da = new SqlDataAdapter(cmd);
DataTable dt = new DataTable();
da.Fill(dt);
Session["Uname"] = Login1.UserName;
if (dt.Rows.Count > 0)
{
Response.Redirect("Home.aspx");
}
我一直致力于未登录用户无法访问某些页面的功能,但我不确定这是否会导致其搞砸..
稍微摆弄后,我发现拒绝用户似乎对它有影响,但是不知道任何其他方式可以重定向非登录尝试。
非常感谢任何帮助!
答案 0 :(得分:0)
查看您的代码,在sql命令中,您的查询将密码参数定义为@Password
,同时将其添加到cmd参数集合中,而不是@ @Wachtwoord
,而不是@Password。
以下是更新后的代码:
SqlCommand cmd = new SqlCommand("SELECT * FROM Users WHERE Username =@Username and Password=@Password", con);
cmd.Parameters.AddWithValue("@Username", Login1.UserName);
cmd.Parameters.AddWithValue("@Password", Login1.Password);
此外,您可以使用FormsAuthentication.GetRedirectUrl获取返回网址,而不是始终重定向到Home.aspx。因此,如果您尝试访问某些页面Protected.aspx而不登录,则用户将被重定向到Login.aspx?ReturnUrl=protected.aspx
,登录后用户将被重定向到Protected.aspx页面。
if (dt.Rows.Count > 0)
{
Response.Redirect(FormsAuthentication.GetRedirectUrl( Login1.UserName, false));
}