2012-05-10 4 views
2

Это стандартные демки для ASP.NET MVC 3 веб управлениях пользователей сайта включают в себя следующий процесс входа в систему:Аутентифицировать ASP.NET сеанса работы пользователя с JavaScript

  1. Пользователь вводит данные аутентификации.
  2. Данные публикуются на сервере.
  3. Код, который обрабатывает попытки аутентификации, проверяет предоставленные данные с помощью БД.
  4. Если все в порядке - звоните FormsAuthentication.SetAuthCookie, чтобы установить куки-файлы для удовлетворения запросов сеанса от браузера.
  5. И перенаправляет пользователя в любое место.

Я хочу реализовать чисто механизм входа в jQuery.Ajax - ASP.NET.

Я могу вызвать действия сайта MVC из js без проблем. Но как мне получить данные FormsAuthentication.SetAuthCookie cookie вручную, из кода JS поместите их в хранилище cookie браузера? Как извлечь их на сервере или в jQuery.ajax код успеха?

ответ

3

С помощью MVC 3 вы можете установить событие onclick для своей кнопки входа, а затем отправить и ajax POST на действие входа в систему. Если действие входа в систему возвращает результат JSON и управление, где пользователь отправляется из вашей функции javascript.

[HttpPost] 
public JsonResult LogOn(LogOnModel model, string returnUrl) 
{ 
    if (ModelState.IsValid) 
    { 
     //Do your authentication 
     FormsAuthentication.SetAuthCookie(model.UserName, model.RememberMe); 
     return Json(true); 
    } 

// If we got this far, something failed, redisplay form 
    return Json(false); 
} 

В вашем представлении добавьте идентификатор в форму и поместите обработчик кликов на кнопку.

<% using (Html.BeginForm("LogOn", "Account", FormMethod.Post, new { Id = "frmLogOn" })) 
    { %> 
    <%: Html.ValidationSummary(true, "Login was unsuccessful. Please correct the errors and try again.")%> 
    <div> 
     <fieldset> 
      <legend>Account Information</legend> 

      <div class="editor-label"> 
       <%: Html.LabelFor(m => m.UserName)%> 
      </div> 
      <div class="editor-field"> 
       <%: Html.TextBoxFor(m => m.UserName)%> 
       <%: Html.ValidationMessageFor(m => m.UserName)%> 
      </div> 

      <div class="editor-label"> 
       <%: Html.LabelFor(m => m.Password)%> 
      </div> 
      <div class="editor-field"> 
       <%: Html.PasswordFor(m => m.Password)%> 
       <%: Html.ValidationMessageFor(m => m.Password)%> 
      </div> 

      <div class="editor-label"> 
       <%: Html.CheckBoxFor(m => m.RememberMe)%> 
       <%: Html.LabelFor(m => m.RememberMe)%> 
      </div> 

      <p> 
       <input type="submit" value="Log On" onclick="clicked(); return false;" /> 
      </p> 
     </fieldset> 
    </div> 
<% } %> 
<script type="text/javascript"> 
    function clicked() { 
     var form = $('#frmLogOn'); 
     $.ajax({ 
      type: 'POST', 
      url: '/Account/LogOn', 
      data: form.serializeObject(), 
      success: function (result) { 
       if (result == true) { 
        alert("success"); 
        window.top.location = "/Home/Index"; 
       } 
       else { 
        alert("failure"); 
       } 
      }, 
      error: function (data) { 
       alert("error"); 
      } 
     }); 
    } 
</script> 
+0

Где бы файлы cookie auth были установлены в этом примере? Как они поступают в клиентский браузер и записываются в хранилище файлов cookie? –

+0

Вызов метода FormsAuthentication.SetAuthCookie() в действии LogOn устанавливает cookie в ответе на вызов POST в/Account/LogOn. Этот файл cookie будет создан на стороне клиента, и если вы затем отправите браузер пользователя на URL-адрес, требующий авторизации, он будет использовать файл cookie. – rclement

+0

Я проверю и действительно ли прочитает файлы cookie с помощью вызова ajax - будет отмечен как ответ. Спасибо. –

0

Установите бета-версию MVC4, используемый по умолчанию Интернет-шаблон предоставляет механизм проверки Ajax, который можно украсть и поместить в ваше приложение MVC3.

Или просто используйте MVC4, так как, вероятно, MVC4 будет выпущен в ближайшие пару месяцев. Существует также лицензия go-live для текущей бета-версии MVC4, поэтому вы можете даже пойти навстречу с ней, если захотите.

+0

Я буду смотреть на него сейчас. Почему вы упоминаете лицензию? Как это связано с запуском MVC3 или 4 веб-сайтов? Могу ли я использовать его каким-либо образом? –

+1

@ MaximV.Pavlov - Большинство бета-версий от Microsoft не позволяют использовать код на веб-сайтах для производства, если вы не получаете лицензию go-live. Они выдали такую ​​лицензию на бета-версию MVC4. –

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