如何在ASP.NET MVC 5中登出用户?

4
我正在尝试使用以下代码在视图中注销用户,当会话对象不存在时:

FormsAuthentication.SignOut();

但是这种方法行不通 - 用户已经被认证了。
我看到默认的LogOff Controller Action使用以下代码来登出用户:
AuthenticationManager.SignOut();

但是我无法在我的视图中使用此代码。

那么,如何在我的视图中注销用户?如果这不可能,在控制器中该如何操作?

谢谢您的帮助 :)


默认的注销操作(或其副本)只需调用即可。这可以是 JavaScript 调用或实际的 a 链接。 - Jared
当我在我的控制器中调用"RedirectToAction("LogOff", "Account");"时,我的用户已经通过身份验证。 - Robert Jaskowski
1
你一直在说...用户已经通过身份验证了。这是什么意思?当然,他们已经通过了身份验证,你想要“取消验证”他们。此外,除非用户发出新的请求,否则您的代码将无法“注意到”注销。也就是说,如果您调用AuthenticationManager.SignOut();并在下一行中使用User.Identity.IsAuthenticated; - 它仍将显示为真。 - Tommy
@Tommy 好的..这是一个很好的提示。那么我该如何将IsAuthenticated设置为false呢?User.Identity.IsAuthenticated = false; - 不起作用..它是只读的。 - Robert Jaskowski
1
你需要重定向用户或以某种方式向服务器发出新请求。调用SignOut();,将其重定向到其他地方。这会发出一个新的请求(客户端将发送刚刚从上一个请求中接收到的更新的cookie,您在其中注销了它们),然后更新的身份验证状态将可用。 - Tommy
1个回答

3
你可以在控制器中实现这个功能,例如在一个单独的动作中,如LogOut()。完成注销后,将用户重定向到前台页面(例如)。
然后,您只需创建指向该操作的链接即可。
视图不应包含除if语句或for循环之类的简单表示逻辑之外的任何内容。控制器应负责应用程序行为,如注销操作。

我已经尝试过类似的方法,但是当函数“FormsAuthentication.SignOut()”无法工作时,我该怎么做?而使用函数“AuthenticationManager.SignOut()”时,会出现一个错误,提示这个函数没有实现。 - Robert Jaskowski

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接