如何从Microsoft Oauth登录帐户注销?

时间:2014-04-14 06:46:05

标签: c# asp.net-mvc asp.net-mvc-4 oauth

我有一个mvc4 Web应用程序,我已经在其中实现了microsoft外部登录。但我的注销无法正常工作。注销我用过 -

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

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

1 个答案:

答案 0 :(得分:2)

在尝试使用我的解决方案之前,我想suggest you使用默认模板打开 MVC应用程序,并检查默认功能如何适用于Login和{{1} }。

我确定您可以轻松识别您的错误,您将获得解决方案。

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

在您的App_Start中:创建类似下面的类

Logout

在你的控制器中:

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

在您的Fillter配置中

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

在Global.ascx中验证:

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

在您的视图中

        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> 访问权限:

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());
}

注意:在所有控制器中添加:

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

祝你好运:)