在我的ASP.NET Web应用程序中,项目结构如下图所示:
网站的Web.config具有表单身份验证:
<authentication mode="Forms">
<forms loginUrl="~/Login.aspx" timeout="2880" />
</authentication>
Pages文件夹的Web.config有:
<?xml version="1.0"?>
<configuration>
<system.web>
<authorization>
<allow roles="Admin"/>
<deny users="*"/>
</authorization>
</system.web>
我有一个带有角色Admin的用户管理员。成功登录后,我试图重定向Home.aspx中的用户驻留在Pages文件夹中:
protected void EMSLogin_Authenticate(object sender, AuthenticateEventArgs e) {
TextBox UserNameTextBox = EMSLogin.FindControl("UserName") as TextBox;
TextBox PasswordTextBox = EMSLogin.FindControl("Password") as TextBox;
if (Membership.ValidateUser(UserNameTextBox.Text, PasswordTextBox.Text)) {
Response.Redirect("~/Pages/Home.aspx");
}
}
但它不起作用。它再次重定向到Login页面,即Login.aspx,其URL为:localhost:3695/Login.aspx?ReturnUrl=%2fPages%2fHome.aspx
。
我怎样才能做到这一点?任何信息都会非常有用。
问候。
答案 0 :(得分:8)
Membership.ValidateUser
仅验证针对成员资格提供程序的用户名和密码。它不会发出身份验证cookie。
如果你想这样做,你需要在重定向之前使用SetAuthCookie
方法:
if (Membership.ValidateUser(UserNameTextBox.Text, PasswordTextBox.Text))
{
FormsAuthentication.SetAuthCookie(UserNameTextBox.Text, false);
Response.Redirect("~/Pages/Home.aspx");
}
或者如果在您的web.config中设置:
<authentication mode="Forms">
<forms loginUrl="~/Login.aspx" defaultUrl="~/Pages/Home.aspx" timeout="2880" />
</authentication>
您还可以使用RedirectFromLoginPage
方法发出身份验证Cookie并将您重定向到默认页面:
if (Membership.ValidateUser(UserNameTextBox.Text, PasswordTextBox.Text))
{
FormsAuthentication.RedirectFromLoginPage(UserNameTextBox.Text, false);
}