Widok konta po wylogowaniu i powrotu do poprzedniej strony

0

Cześć,
Zrobiłem sobie logowanie do aplikacji i korzystam z Identity, wszystko działa fajnie ale problem pojawia się po wylogowaniu. Gdy wyloguję się to po wciśnięciu przycisku powrotu do poprzedniej strony w przeglądarce pojawia mi się widok, który jest dostępny po zalogowaniu. Co prawda nie mogę nic wtedy zrobić w aplikacji bo przy próbie np.przejścia do innej strony pojawia mi się okno logowania.
Co z tym fantem mogę zrobić?

Akcja dla wylogowania:

[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult SignOut()
{
    AuthenticationManager.SignOut(DefaultAuthenticationTypes.ApplicationCookie);
    return RedirectToAction(MVC.Login.Login.SignIn());
}
0

nie znam tego języka ale na bank musi być jakaś metoda na czyszczenie danych przy wyjściu jak Redirect to przy okazji Clear

0

Jedną z metod jest ustawienie w nagłówku dla stron po zalogowaniu "no-cache". Przez co klikając Wstecz przeglądarka nie może od tak wziąć tego co sobie wcześniej zapamiętała.
Nie pamiętam w tym momencie dokładnie, ale był atrybut dla akcji, który ustawiał "no-cache".

EDIT: Oczywiście spowoduje to większe obciążenie serwera przy dużej liczbie użytkowników.

0

Mam te wszystkie znaczniki ale to nic nie daje.

<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="cache-control" content="max-age=0" />
<meta http-equiv="cache-control" content="no-cache" />
<meta http-equiv="expires" content="0" />
<meta http-equiv="expires" content="Tue, 01 Jan 1980 1:00:00 GMT" />
<meta http-equiv="pragma" content="no-cache" />
0

Witam,

A robisz to wszystko po SSL?

Pozdrawiam,

mr-owl

0

Może musisz zrobić coś jak poniżej, czyli generować dany fragment widoku lub nie w zależności od tego czy użytkownik jest zalogowany.

@using Microsoft.AspNetCore.Identity
@using AutomatedInvoiceGenerator.Models

@inject SignInManager<ApplicationUser> SignInManager
@inject UserManager<ApplicationUser> UserManager

@if (SignInManager.IsSignedIn(User))
{
    <form asp-area="" asp-controller="Account" asp-action="LogOff" method="post" id="logoutForm" class="navbar-right">
        <ul class="nav navbar-nav navbar-right">
            <li>
                <a asp-area="" asp-controller="Manage" asp-action="Index" title="Manage">Witaj @UserManager.GetUserName(User)</a>
            </li>
            <li>
                <button type="submit" class="btn btn-link navbar-btn navbar-link">Wyloguj</button>
            </li>
        </ul>
    </form>
}
else
{
    <ul class="nav navbar-nav navbar-right">
        <li><a asp-area="" asp-controller="Account" asp-action="Login">Zaloguj</a></li>
    </ul>
}

0

mr-owl - nie, pytanie tylko czy muszę?

Mały:

                <div class="col-sm-offset-6 col-sm-3">
                @if (Request.IsAuthenticated)
                {
                    using (Html.BeginForm("SignOut", "Login", new { area = "Login" }, FormMethod.Post))
                    {
                        @Html.AntiForgeryToken()
                        <h4>
                            Witaj @User.Identity.GetUserName()!
                            <input type="submit" class="btn btn-danger" value="Wyloguj" />
                        </h4>
                    }
                }
            </div>
0

Witam,

Zobacz może (to) rozwiązanie.

Pozdrawiam,

mr-owl

0

Ok, pozmieniałem wylogowanie na takie coś i działa ale tylko na MS Edge natomiast na Chrome i Firefox nie...

[HttpPost]
[Authorize]
[ValidateAntiForgeryToken]
public virtual ActionResult SignOut()
{
    Session.Abandon();
    AuthenticationManager.SignOut(DefaultAuthenticationTypes.ExternalCookie,
    DefaultAuthenticationTypes.ApplicationCookie,//<---ważne
    DefaultAuthenticationTypes.TwoFactorCookie,
    DefaultAuthenticationTypes.TwoFactorRememberBrowserCookie,
    DefaultAuthenticationTypes.ExternalBearer);
    return RedirectToAction(MVC.Login.Login.SignIn());
}

Po prosze o następne sugestie.
PS. przeładowanie strony po wylogowaniu nic nie daje.

1

Problem rozwiązany, dziękuję za odpowiedzi :)
Rozwiązaniem okazało się dodanie do pliku Global.asax.cs takiego oto kodu:

protected void Application_BeginRequest()
{
    Response.Cache.SetCacheability(System.Web.HttpCacheability.ServerAndNoCache);
    Response.Cache.SetExpires(DateTime.UtcNow.AddHours(-1));
    Response.Cache.SetNoStore();
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1