1

我是 ASP.NET 的新手,现在一直在尝试解决这个问题。

我遇到了这个博客,一切看起来都很好,除了一件事:HttpContext.Current.User.Identity is FormsIdentity在这个代码片段中,下面的代码总是评估为 false:

protected void Application_AuthenticateRequest(Object sender,
EventArgs e)
{
  if (HttpContext.Current.User != null)
  {
    if (HttpContext.Current.User.Identity.IsAuthenticated)
    {
     if (HttpContext.Current.User.Identity is FormsIdentity)
     {
        FormsIdentity id =
            (FormsIdentity)HttpContext.Current.User.Identity;
        FormsAuthenticationTicket ticket = id.Ticket;

        // Get the stored user-data, in this case, our roles
        string userData = ticket.UserData;
        string[] roles = userData.Split(',');
        HttpContext.Current.User = new GenericPrincipal(id, roles);
     }
    }
  }
}

当我使用断点时,我的 PC 名称是当前用户,我认为它不是FormsIdentity.

网络配置:

<?xml version="1.0"?>
<!--
  For more information on how to configure your ASP.NET application, please visit
  http://go.microsoft.com/fwlink/?LinkId=169433
  -->
<configuration>
  <system.web>
    <compilation debug="true" targetFramework="4.0"/>
  </system.web>
</configuration>

我在这里想念什么?成功登录后如何判断HttpContext当前用户?

4

1 回答 1

1

如果您希望用户拥有 FormsIdentity,则需要在 web.config 文件中打开 FormsAuthentication。在您的元素中,您需要填充身份验证和授权节点。(例如,请参阅您提到的标题为“使用基于角色的表单身份验证保护目录”的博客文章的部分)现在这些元素不存在于您的 web.config 文件中,因此不会发生表单身份验证。像这样的配置是典型的:

<system.web>
    <authentication mode="Forms">
       <forms name=".ASPXFORMSDEMO" loginUrl="logon.aspx"  protection="All" path="/" timeout="30" />
    </authentication> 
    <authorization>
       <deny users ="?" />
       <allow users = "*" />
    </authorization>
</system.web>

该节点指示 ASP.Net 使用表单身份验证,而该节点拒绝任何未进行身份验证的用户访问该站点。

更多信息可以在这里这里找到

于 2013-01-28T03:05:21.357 回答