【问题标题】:Role based authorization in asp.netasp.net中基于角色的授权
【发布时间】:2014-07-16 17:26:00
【问题描述】:

我正在开发一个现有的网站。我目前正在为站点进行基于角色的授权。我在 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");
}

但是重定向不起作用。我只为管理员展示了代码,还有其他角色。当我单击登录按钮时,网址会更改,好像登录无效并停留在登录页面上。如果我缺少基于角色的授权的任何内容,请提供帮助。

编辑:我调试了整个代码,代码在 Respsonse.Redirect 处停止。是因为web.config的问题。为每个文件夹使用 web.config 会更好吗?

【问题讨论】:

  • “这就是我登录的方式”后面的代码实际上并没有让任何人登录。不是用于登录的正确代码。
  • 哦。那么我添加的答案不是正确的方法吗?有什么链接可以分享吗?
  • 不需要空白页。我添加了一个更简洁的答案。
  • 是的,我也提到了你的回答。那个空白页是我别无选择的时候。然后今天得到了这个。总之非常感谢!!!

标签: c# asp.net roles


【解决方案1】:

在您使用表单身份验证时手动登录用户。使用FormsAuthentication.SetAuthCookie().

例子:

string username = UsernameTB.Text;
FormsAuthentication.SetAuthCookie(username, false);

他们登录后,您可以重定向到最初请求的页面或登录页面(取决于他们如何到达登录页面)。为此,您使用Response.Redirect()。这将向客户端发送 HTTP 重定向,告诉他们请求不同的页面。一旦Response.Redirect() 完成,当前执行就会以ThreadAbortException 结束(这是正常的)。

【讨论】:

    【解决方案2】:

    您可能需要在重定向逻辑之前添加以下行。

    Response.BufferOutput = true;
    

    How to: Redirect Users to Another Page

    【讨论】:

    • 我已经编辑了这个问题。你能告诉我编辑的部分是否可以工作吗?
    • @Partha 我个人认为您的 web.config 没有任何问题。您是否尝试过添加 return; 以查看这是否会像有人在此答案中尝试的那样强制该方法退出? Response.Redirect not ending execution
    【解决方案3】:

    我在这方面做了更多的工作。问题很可能出在 Response.Redirect() 上。此语法不会设置身份验证 cookie,因此当它看到启用身份验证时会返回身份验证页面。两种方法:

    1. 在身份验证标签中使用 defaulturl 并重定向到一个空页面。在该空页面的页面加载时,基于角色重定向到不同的页面。
    2. 在重定向之前使用 formsauthentication.setauthcookie(user,bool variable)。

    感谢大家的尝试。

    【讨论】:

    • Response.Redirect() 唯一要做的就是向客户端发送一个 HTTP 重定向。当前请求在该点结束。
    • 是的。我错过了,无法得到什么是错的。然后我阅读了更多关于身份验证的内容并得出了这个结论。只是为那些可能错过这个小细节的人添加了这个。
    猜你喜欢
    • 2013-02-13
    • 1970-01-01
    • 1970-01-01
    • 2022-01-01
    • 2013-04-11
    • 2012-05-14
    • 1970-01-01
    • 2018-04-17
    相关资源
    最近更新 更多