RedirectToActionせずにクリアサインアウト後のRequest.IsAuthenticated値()()
-
06-09-2019 - |
質問
私は、アカウント管理コントローラを書き込み、別に自分のユーザーのアカウントの削除を処理しなければならいます:
[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");
}
しかしRequest.IsAuthenticatedとPage.User.Identity値はまだFormsAuth.SignOut()。
の後に設定されているためDeleteSelfビューを表示しながら部分ビューLogOnUserControl.ascxはまだユーザー名をログアウトだけを示し新しいアクションShowDeleteSelfMessageを追加すると、問題を解決することができますが、私はこのソリューションを好きではない:
...
{
FormsAuth.SignOut();
return RedirectToAction("ShowDeleteSelfMessage");
}
...
public ActionResult ShowDeleteSelfMessage()
{
return View("DeleteSelf");
}
他のアイデア?ありがとうございます!
解決
のViewData [ "UserDeleted"]に対処するためにあなたのLogOnUserControl.ascxを変更します:
[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") %> ]
<% } %>
他のヒント
Delete
アクションでは、代わりにreturn View("DeleteSelf")
の、このreturn Redirect("DeleteSelf")
を試してみてください。
私は標準AccountController.csファイルのソースコードを検査し、発見した二つの方法
public ActionResult ChangePasswordSuccess()
{
return View("ChangePasswordSuccess");
}
と
public ActionResult RestorePasswordSuccess()
{
return View("RestorePasswordSuccess");
}
のみ対応図を示しています。だから私の
public ActionResult ShowDeleteSelfMessage()
{
return View("DeleteSelf");
}
この方法は、そのような会社では良い見ていきます。私は一貫性のために名前を変更する必要がありますけど。
所属していません StackOverflow