Klar Request.IsAuthenticated Wert nach SignOut () ohne RedirectToAction ()
-
06-09-2019 - |
Frage
Ich schreibe einen Account-Management-Controller und habe Löschen von eigenem Benutzerkonto verarbeiten getrennt:
[Authorize]
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Delete(string userName, string confirmButton)
{
MembershipService.DeleteUser(userName);
if (User.Identity.Name.Equals(userName,
StringComparison.InvariantCultureIgnoreCase))
{
FormsAuth.SignOut();
return View("DeleteSelf");
}
else
return RedirectToAction("Index");
}
Aber Teilansicht LogOnUserControl.ascx noch zeigt protokolliert nur Benutzernamen, während DeleteSelf Ansicht angezeigt wird, weil Request.IsAuthenticated und Page.User.Identity Werte noch nach FormsAuth.SignOut eingestellt werden ().
eine neue Aktion ShowDeleteSelfMessage Hinzufügen könnte das Problem lösen, aber ich weiß nicht, wie diese Lösung:
...
{
FormsAuth.SignOut();
return RedirectToAction("ShowDeleteSelfMessage");
}
...
public ActionResult ShowDeleteSelfMessage()
{
return View("DeleteSelf");
}
Jede andere Ideen? Vielen Dank!
Lösung
Ändern Sie Ihre LogOnUserControl.ascx mit Viewdata zu behandeln [ "UserDeleted"]:
[Authorize]
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Delete(string userName, string confirmButton)
{
MembershipService.DeleteUser(userName);
if (User.Identity.Name.Equals(userName,
StringComparison.InvariantCultureIgnoreCase))
{
FormsAuth.SignOut();
// ***
ViewData["UserDeleted"] = true;
// ***
return View("DeleteSelf");
}
else
return RedirectToAction("Index");
}
LogOnUserControl.ascx:
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl" %>
<% if (Request.IsAuthenticated && !(ViewData["UserDeleted"] ?? false)) { %>
Welcome <b><%= Html.Encode(Page.User.Identity.Name) %></b>!
[ <%= Html.ActionLink("Log Off", "LogOff", "Account") %> ]
<% } else { %>
[ <%= Html.ActionLink("Log On", "LogOn", "Account") %> ]
<% } %>
Andere Tipps
In Delete
Aktion statt return View("DeleteSelf")
, versuchen Sie diese return Redirect("DeleteSelf")
Ich habe den Quellcode des Standard AccountController.cs Datei untersucht und festgestellt, zwei Methoden
public ActionResult ChangePasswordSuccess()
{
return View("ChangePasswordSuccess");
}
und
public ActionResult RestorePasswordSuccess()
{
return View("RestorePasswordSuccess");
}
, die nur entsprechende Ansichten zeigen. Also mein
public ActionResult ShowDeleteSelfMessage()
{
return View("DeleteSelf");
}
Methode wird in einem solchen Unternehmen gut aussehen. Obwohl ich soll den Namen für die Konsistenz verändern.