2013-02-21 3 views
1

Я создаю приложение в основном на основе шаблона, поставляемого с WebMatrix 2.Ссылка на выход для Websecurity? - Webmatrix, Razor

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

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

<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("~/"); 
    } 
} 

Но когда я нажмите на эту ссылку, он ничего не делает, и я до сих пор Вход в систему?

Пожалуйста, помогите, где я иду не так?

ответ

2

Проблема заключается в том, что по умолчанию логины выхода (и должны быть) проверены 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, чтобы иметь нормальный link submit this form, что делает его похожим на нормальную ссылку на конечного пользователя, только они защищены!

+0

У вас есть ссылка на какой-то JavaScript, который бы достиг этого? Я просто пробовал форму menthod, которая работает, но она выдает все форматирование из окна? – Gavin5511

+1

Прикрепите 'id' к своей форме, спрячьте ее вне поля зрения и выполните' document.getElementById ('formid'). Submit(); '. –

+0

Превосходно, я отдам его. благодаря – Gavin5511

Смежные вопросы