Когда пользователь моего приложения нажимает кнопку «Выйти» напрямую, он выходит из системы и возвращается на страницу входа (см. Код ниже для обоих действий).Это работает по назначению, однако пользователи с правами администратора могут принудительно выходить из системы отдельных пользователей.В настоящее время я делаю это с SignalR, и столкнулся со странной проблемой.
Когда я перенаправляю на LogOff
из клиентского метода, все вызывается правильно.Пользователь клиента вышел из системы, и RedirectToAction
правильно перенаправляет на действие LogIn
.Однако представление LogIn
не отображается, пока я не обновлю страницу вручную с помощью F5.Мне совершенно не удалось понять, почему представление не отображается в первый раз
Действие по выходу из системы
public ActionResult LogOff()
{
FormsAuthentication.SignOut();
return RedirectToAction("Login", "Account");
}
Действие по входу в систему
public ActionResult Login(string returnUrl, string displayMsg)
{
ViewBag.ReturnUrl = returnUrl;
ViewBag.DisplayMsg = displayMsg;
ViewBag.PasswordAttempts = 0;
return View();
}
Клиентский метод SignalR
$.connection.hub.start();
authHub.client.LogOut = function () {
$.ajax({
url: '@Url.Action("LogOff", "Account", new { area = ""})',
type: "POST"
});
$.connection.hub.stop();
}
Просмотр входа в систему
section id="loginForm">
<div class="col-md-12">
<div class="wrap">
<p class="form-title">Log In</p>
@using (Html.BeginForm("Login","Account",new {ViewBag.ReturnUrl, ViewBag.PasswordAttempts}, FormMethod.Post, new{@class="login"}))
{
@Html.AntiForgeryToken()
<section class="DisplayMsg">@ViewBag.DisplayMsg</section>
<section>@Html.ValidationMessageFor(m => m.UserName) </section>
<label>User Name:</label> @Html.TextBoxFor(m => m.UserName)
<section>@Html.ValidationMessageFor(m => m.Password)</section>
<label>Password:</label>@Html.PasswordFor(m => m.Password)
<input type="submit" value="Log In" class="btn btn-success btn-sm" />
@*<div class="reset-forgot">
<div class="row">
<div class="col-md-6 reset-pass-content">
@Html.ActionLink("Reset Password", "PasswordReset", "Account", new {area = string.Empty})
</div>
</div>
</div>*@
}
</div>
</div>