登录后重定向:Web.config

时间:2012-03-18 13:57:40

标签: c# asp.net redirect forms-authentication

在我的ASP.NET Web应用程序中,项目结构如下图所示:

enter image description here

网站的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

我怎样才能做到这一点?任何信息都会非常有用。

问候。

1 个答案:

答案 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);
}