我正在使用现有的网站。我目前正在为该网站开展基于角色的授权。我在web.config中提供了以下内容:
<system.web>
<authentication mode="Forms">
<forms name=".ASPXFORMSAUTH" loginUrl="Login.aspx" requireSSL="false" protection="All" slidingExpiration="true" path="/" timeout="240" cookieless="UseDeviceProfile" enableCrossAppRedirects="false" />
</authentication>
<authorization>
<deny users="?"/>
</authorization>
</system.web>
<location path="Admin">
<system.web>
<authorization>
<allow roles="Admin"/>
<deny users="*"/>
</authorization>
</system.web>
</location>
这就是我将用户添加到角色的方式:
if (!Roles.RoleExists(DropDownList1.SelectedValue))
{
Roles.CreateRole(DropDownList1.SelectedValue);
}
Roles.AddUserToRole(TextBox1.Text, DropDownList1.SelectedValue);
这就是我登录的方式:
if (Roles.IsUserInRole(TextBox1.Text,"Admin"))
{
//Code to validate password
Response.Redirect("./Admin/AdminHome.aspx");
}
但重定向不起作用。我只显示了admin的代码,还有其他角色。当我单击登录按钮时,URL会更改,就像登录无效并保留在登录页面上一样。如果我遗漏任何基于角色的授权,请提供帮助。
编辑:我重新编写了整个代码,代码在Respsonse.Redirect停止。是因为web.config的问题。为每个文件夹使用web.config会不会更好?
答案 0 :(得分:2)
在您使用表单身份验证时手动登录用户。使用FormsAuthentication.SetAuthCookie().
示例:
string username = UsernameTB.Text;
FormsAuthentication.SetAuthCookie(username, false);
在他们重新登录后,您可以执行重定向到最初请求的页面或登录页面(取决于他们如何到达登录页面)。您可以使用Response.Redirect()。这将向客户端发送HTTP重定向,告诉他们请求不同的页面。一旦Response.Redirect()
完成,当前执行以ThreadAbortException
结束(这是正常的)。
答案 1 :(得分:0)
答案 2 :(得分:0)
我对此的工作不多。问题可能在于Response.Redirect()。此语法不会设置身份验证cookie,因此当它看到启用身份验证时会返回到身份验证页面。两种方法:
感谢所有人的努力。