如何从Microsoft Oauth登录帐户注销

本文关键字:注销 登录 Oauth Microsoft | 更新日期: 2023-09-27 17:58:15

我有一个mvc4 web应用程序,并在其中实现了microsoft外部登录。但我的注销不起作用。用于注销我使用-

 WebSecurity.Logout();
 Session.RemoveAll();
 return RedirectToAction("UserLogin");

但它不起作用。注销后,当我再次单击登录按钮时,它会自动使用以前的帐户登录。请帮忙。

如何从Microsoft Oauth登录帐户注销

在尝试我的解决方案之前,我希望suggest you使用默认模板打开MVC应用程序,并检查默认功能如何适用于LoginLogout

我相信你可以很容易地识别你的错误,你会得到解决方案。

也试试下面给出的解决方案,这是我在我的项目中使用的,目前它对我来说很好。

在您的应用程序启动中:创建如下类

public class AuthorizeUser : AuthorizeAttribute
{
    protected override bool AuthorizeCore(HttpContextBase httpContext)
    {
        if (!httpContext.User.Identity.IsAuthenticated) return false;
        return base.AuthorizeCore(httpContext);
    }
}

在您的控制器中:

    [AuthorizeUser]
    public class UserController : BaseController<Users>
    {
       [HttpPost]
       [ValidateAntiForgeryToken]
       public ActionResult LogOff()
       {
           FormsAuthentication.SignOut();
           return RedirectToAction("UserLogin");
       }
    }

在填充器配置中:

public class FilterConfig
{
    public static void RegisterGlobalFilters(GlobalFilterCollection filters)
    {
        filters.Add(new HandleErrorAttribute());
        filters.Add(new AuthorizeUser()); // Register Authorize User
    }
}

在Global.ascx:中验证

        protected void Application_PostAuthenticateRequest(Object sender, EventArgs e)
        {
            HttpCookie authCookie = Request.Cookies[FormsAuthentication.FormsCookieName];
            if (authCookie != null)
            {
                FormsAuthenticationTicket authTicket = FormsAuthentication.Decrypt(authCookie.Value);
                JavaScriptSerializer serializer = new JavaScriptSerializer();
                if (authTicket.UserData == "OAuth") return;
            }
        }

在您的视图中:

<span>
@using (Html.BeginForm("LogOff", "User", FormMethod.Post, new { id = "logoutform" }))
{
     @Html.AntiForgeryToken()
     <a href="javascript:document.getElementById('logoutform').submit()">Logoff</a>   
}
</span>

您的登录操作结果应该在您的Conroller:中具有AllowAnonymous访问权限

    [HttpPost]
    [AllowAnonymous]
    [ValidateAntiForgeryToken]
    public ActionResult UserLogin(LoginViewModel model, string returnUrl) // Model is optional But return URL is required
    {
         // Do Stuff
    }

Login表单的首次/索引调用:

[AllowAnonymous]
public ActionResult Login(string returnUrl)
{
    ViewBag.ReturnUrl = returnUrl;
    return View(new LoginViewModel());
}

返回Url必须在控制器中:

    private ActionResult RedirectToLocal(string returnUrl)
    {
        if (Url.IsLocalUrl(returnUrl)) return Redirect(returnUrl);
        else return RedirectToAction("UserLogin");
    }

注意:将其添加到所有控制器中:

[AuthorizeUser]

好运:)