【问题标题】:How to set value to User.Identity.IsAuthenticated as false in Forms Authentication如何在表单身份验证中将 User.Identity.IsAuthenticated 的值设置为 false
【发布时间】:2013-11-28 12:14:41
【问题描述】:
我有一种情况,我也想输入匿名用户的详细信息。所以我在个人资料中为他们创建了一个用户 ID。当我设置用户详细信息时
FormsAuthentication.SetAuthCookie(username, true);
我想要与 User.Identity.Name 和用户名的用户相关的详细信息,但 User.Identity.IsAuthenticated 为 false。现在我得到它是真实的。我只想在特定登录后将其设置为 true。
【问题讨论】:
标签:
c#
login
forms-authentication
【解决方案1】:
FormsIdentity 类总是硬连线返回 true。所以这是无法改变的。只要名称不为空,即使是 GenericIdentity 也会返回 true。
一种解决方法是创建您自己的 IIdentity 实现,并替换 Global.asax 中 Application_PostAuthenticateRequest 事件中的表单身份。这是一种经过验证且安全的解决方案。
另外请考虑您是否真的想这样做。未经身份验证的用户是匿名的,他们没有姓名,这是一种很好的做法,并且非常详细地说明了为什么内置身份类会以它们的方式工作。
【解决方案2】:
很遗憾,您不能将 User.Identity.IsAuthenticated 修改为 false。您可以创建自己的 cookie,也可以将此用户的字符串变量作为字典分配给会话。通过这种方式,您可以修改该值并针对特定场景手动销毁该值。