ASP NET CORE MVC -Применение и «двойной выход» - PullRequest
1 голос
/ 20 марта 2020

У меня проблема с "двойным выходом из системы" моего ASP NET CORE 3.1 MVC приложения. Проблема заключается в следующем: - запустить приложение - войти в систему - открыть второе окно браузера на том же сайте - нажать кнопку выхода из системы в одном из Windows - теперь проблема ... нажать кнопку выхода из системы во втором окне: появляется белая страница, url установлен на «https://localhost: 44305 / Identity / Account / Logout? returnUrl =% 2F », и ничего не происходит…

Ошибка возникает в новом проекте, настройка по умолчанию VS 2019 шаблон!

У кого-нибудь есть идеи?

BR Marco

Ответы [ 2 ]

0 голосов
/ 24 марта 2020

щелкните по выходу из системы во втором окне: появляется белая страница, URL-адрес установлен на "https://localhost: 44305 / Identity / Account / Logout? ReturnUrl =% 2F " и ничего не происходит

Я могу воспроизвести ту же проблему, и если мы проверим запрос на вкладке сети браузера, мы обнаружим, что он возвращает 400 код состояния, как показано ниже.

enter image description here

Судя по моим тестам и исследованиям, эта проблема, похоже, вызвана проверкой токена защиты от подделки при нажатии кнопки выхода из системы на второй вкладке браузера.

Если вы хотите пропустить проверку токена подделки, попробуйте заменить код по умолчанию Logout PageModel и применить к нему IgnoreAntiforgeryTokenAttribute, как показано ниже.

[AllowAnonymous]
[IgnoreAntiforgeryToken]
public class LogoutModel : PageModel
{
    private readonly SignInManager<IdentityUser> _signInManager;
    private readonly ILogger<LogoutModel> _logger;

    public LogoutModel(SignInManager<IdentityUser> signInManager, ILogger<LogoutModel> logger)
    {
        _signInManager = signInManager;
        _logger = logger;
    }

    public void OnGet()
    {
    }

    public async Task<IActionResult> OnPost(string returnUrl = null)
    {
        await _signInManager.SignOutAsync();
        _logger.LogInformation("User logged out.");
        if (returnUrl != null)
        {
            return LocalRedirect(returnUrl);
        }
        else
        {
            return RedirectToPage();
        }
    }
}

Результат теста

enter image description here

0 голосов
/ 20 марта 2020

Нет, не другой браузер, только другая вкладка того же браузера!

У меня нет кода выхода, он находится внутри "основного шаблона по умолчанию asp net"! Если вы создадите новое приложение Asp Net Core MVC, у вас будет такое же поведение!

Единственное, что у меня есть, это "код" формы выхода из системы (созданной VS2019) :

<form class="form-inline" asp-area="Identity" asp-page="/Account/Logout" asp-route-returnUrl="@Url.Action("Index", "Home", new { area = "" })">
    <button type="submit" class="nav-link btn btn-link text-dark">Logout</button>
</form>
...