如何从Microsoft Oauth登录帐户注销
本文关键字:注销 登录 Oauth Microsoft | 更新日期: 2023-09-27 17:58:15
我有一个mvc4 web应用程序,并在其中实现了microsoft外部登录。但我的注销不起作用。用于注销我使用-
WebSecurity.Logout();
Session.RemoveAll();
return RedirectToAction("UserLogin");
但它不起作用。注销后,当我再次单击登录按钮时,它会自动使用以前的帐户登录。请帮忙。
在尝试我的解决方案之前,我希望suggest you
使用默认模板打开MVC应用程序,并检查默认功能如何适用于Login
和Logout
。
我相信你可以很容易地识别你的错误,你会得到解决方案。
也试试下面给出的解决方案,这是我在我的项目中使用的,目前它对我来说很好。
在您的应用程序启动中:创建如下类
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]
好运:)