ASP.NET MVC 真正使用表单身份验证注销

Posted

技术标签:

【中文标题】ASP.NET MVC 真正使用表单身份验证注销【英文标题】:ASP.NET MVC truly log off with Forms Authentication 【发布时间】:2011-02-18 02:49:21 【问题描述】:

我在控制器上有一个注销操作:

    public ActionResult Logoff()
    
        var x = Request.IsAuthenticated;
        var y = User.Identity.IsAuthenticated;

        FormsAuthentication.SignOut();
        Session.Abandon();

        var a = Request.IsAuthenticated;
        var b = User.Identity.IsAuthenticated;

        return View();
    

但是,x、y、a 和 b 都是正确的。因此,当我的视图呈现时,它仍然表现得好像用户已登录。有人可以提供解决方案和/或解释吗?

【问题讨论】:

【参考方案1】:

FormsAuthentication.SignOut() 移除了认证cookie,所以你需要在它之后重定向而不是返回一个视图以便通知客户端:

public ActionResult Logoff()

    FormsAuthentication.SignOut();
    return RedirectToAction("Index");

现在在Index 操作中,用户将不再经过身份验证。

【讨论】:

达林说得对。我有时会返回一个“return Redirect(FormsAuthentication.LoginUrl);”这会将用户发送回您在 web.config 的身份验证区域中声明的登录页面。真的一样……

以上是关于ASP.NET MVC 真正使用表单身份验证注销的主要内容,如果未能解决你的问题,请参考以下文章

使用自定义数据库而不是 ASPNETDB 的 ASP.NET MVC 身份验证?

ASP.NET MVC 表单身份验证 + 授权属性 + 简单角色

如何支持 NTLM 身份验证并回退到 ASP.NET MVC 中的表单?

表单身份验证、ASP.NET MVC 和 WCF RESTful 服务

将 asp.net WebForms 应用程序中的组合表单/Windows 身份验证迁移到 asp.net MVC 应用程序

注销 MVC4 应用程序