Ссылка для выхода из Websecurity с использованием Webmatrix и Razor

Я создаю приложение в основном на основе шаблона, поставляемого с WebMatrix 2.

Все работает отлично, хотя у меня есть некоторые проблемы с созданием ссылки «выход» в моем заголовке.

В настоящее время у меня есть следующая ссылка:

<a href="~/account/logout.cshtml">Sign Out</a>

Что, в свою очередь, ведет на эту страницу:

@{
    WebSecurity.RequireAuthenticatedUser();

    if (IsPost) {
        // Verify the request was submitted by the user
        AntiForgery.Validate();

        // Log out of the current user context
        WebSecurity.Logout();

        // Redirect back to the return URL or homepage
        var returnUrl = Request.QueryString["ReturnUrl"];
        Context.RedirectLocal(returnUrl);
    } else {
        Response.Redirect("~/");
    }
}

Но когда я нажимаю на эту ссылку, она ничего не делает, и я все еще вхожу в систему. Где я ошибаюсь?


person Gavin5511    schedule 21.02.2013    source источник


Ответы (1)


Проблема в том, что по умолчанию ссылки для выхода из системы являются (и должны быть) проверенными POST-запросами, это необходимо для предотвращения XSS-атак на выход ваших пользователей из системы путем перенаправления их на страницу выхода.

Благодаря этому коду:

if (IsPost) {
    // Verify the request was submitted by the user
    AntiForgery.Validate();

.. вам нужно будет создать форму для выхода из системы, например:

<form method="post" action="~/account/logout.cshtml">
    @AntiForgery.GetHtml()
    <input type="submit" value="Logout" />
</form>

Конечно, вы можете использовать JavaScript, чтобы обычная ссылка отправила эту форму, что сделает ее похожей на обычную ссылку для конечного пользователя, только они защищены!

person Rudi Visser    schedule 21.02.2013
comment
У вас есть ссылка на какой-нибудь JavaScript, который позволит это сделать? я только что попробовал форму menthod, которая работает, но выбрасывает все форматирование из окна? - person Gavin5511; 21.02.2013
comment
Наклейте id на свою форму, скройте ее из поля зрения и выполните document.getElementById('formid').submit();. - person Rudi Visser; 21.02.2013
comment
Супер, попробую. Спасибо - person Gavin5511; 21.02.2013