15

在 ASP.NET (2.0) 应用程序中,我使用 FormsAuthentication。

在 Global.asax / Application_AuthenticateRequest 方法中,我检查 HttpContext.Current.User 是否为空。

这足以知道表单身份验证 cookie 是否存在、票证是否未过期,以及总体而言,表单身份验证机制是否已完成验证用户的工作?

我需要这个,因为我在该应用程序中有某些页面,有时不需要访问身份验证(基于某些标准),我将它们放在 web.config 中的单独“位置”指令中,以排除它们从“捕获所有”表单身份验证。

即,如果在此“位置”中访问的页面需要保护,我正在尝试检查 Application_AuthenticateRequest,如果是,则要知道用户是否已经通过身份验证,或者我需要重定向到登录。

编辑:正如答案所暗示的,我很可能会选择 IsAuthenticated。为了让我更好地掌握它,这里有 2 个额外的问题:)(请编辑其他答案以添加这些,谢谢):

  1. 我可以假设如果 IsAuthenticated 为真,那么 HttpContext.Current.User 肯定会包含经过身份验证的用户的用户名吗?

  2. 如果强制执行 FormsAuthentication,并且只有少数页面被“位置”指令排除,我怎么能在 HttpContext.Current.User 中得到一个“匿名用户”?

4

3 回答 3

29

不,User可能只是对匿名用户的引用。检查HttpContext.Current.Request.IsAuthenticated

于 2009-01-21T18:51:42.937 回答
3

我通常使用 Request.IsAuthenticated。我无法告诉你你的方法是否应该奏效。听起来应该是这样,尽管如果您支持匿名登录可能会产生副作用?

于 2009-01-21T18:51:12.533 回答
1

顺便说一句,请务必检查上下文也不为空(以防您在 httpmodule 中工作)。

于 2009-01-21T19:06:23.360 回答