2013-03-17 2 views
3

Я был в состоянии успешно использовать (код с точки зрения индекса)Дюрандаль безопасности MVC аутентификации приложение

@if (@User.Identity.IsAuthenticated) 
    { 
    <div id="applicationHost"> 
     @Html.Partial("_splash") 
    </div> 

    @Scripts.Render("~/scripts/vendor"); 
     if(HttpContext.Current.IsDebuggingEnabled) { 
      @Html.AntiForgeryToken() 
      <script> 
       window.userId = "@User.Identity.Name"; 
       console.log(window.userId); 
      </script> 
      <script type="text/javascript" src="~/App/durandal/amd/require.js" data-main="@Url.Content("~/App/main")"></script> 

     } else { 
      <!-- Remember to run the Durandal optimizer.exe to create the main-built.js --> 
      <script type="text/javascript" src="~/App/main-built.js"></script> 
     } 
    } 
    else 
    { 
     <script src="~/Scripts/jquery-1.9.1.min.js"></script> 

      <div id="login"> 
       @Html.Partial("Login") 
      </div> 

    } 

, чтобы получить приложение, чтобы быть изначально вынуждены на страницу входа, после входа в систему (с использованием стандартного MVC контроллера счета и форма входа в систему из стандартного приложения mvc4.

Затем я добавил кнопку в нижний колонтитул, чтобы вызвать метод контроллера выхода (эта функция была добавлена ​​в shell.js, и я подтвердил, что она вызывается, когда кнопка нажата)

function logoff() { 
      var token = $("input[name='__RequestVerificationToken']").val(); 

      $.ajax({ 
       url: "/Account/LogOff", 
       cache: false, 
       type: "POST", 
       async: false, 
       data: { "__RequestVerificationToken": token }, 
       success: function (data) { 
        log("from success in logoff", data, false); //this shows up in the log 


        return true; 
       }, 
       error: function (data) { 
        return false; 
       } 

      }); 
     } 

Я не отлажена trhough метода контроллера и успешно вызывает

[HttpPost] 
     [ValidateAntiForgeryToken] 
     public ActionResult LogOff() 
     { 
      try{ 
      WebSecurity.Logout(); //this call does not generate an error 
      } 
      catch(Exception excp) 
      { 
       string msg = excp.Message; 
      } 
      return RedirectToAction("index", "HotTowel"); 
     } 

страница индекса называется, и пользователь больше не идентифицирован, но вызов PartialView («Вход») выше не изменяет содержимое браузера.

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

У меня есть googled around и не найдены примеры того, кто расширяет шаблон Hot Towel для поддержки аутентификации. (кроме пары вещей на SO о том, как установить токен аутентификации) Я сделал первые шаги, просто предоставив индексному указателю возможность заставить пользователя войти в систему до того, как приложение durandal будет даже загружено. Это отлично работает.

Каков правильный способ заставить это работать? У меня есть образец с использованием набора для начинающих Durnadal, который показывает это поведение. Я могу предоставить всем, кто в ней нуждается.

javascript в shell.js возвращает html, который является указательной страницей, на которую указывает перенаправление. (работает при попытке получить предупреждение, чтобы показать все это проблематично)

Работа на получение образца в SkyDrive и т.д.

+0

Что такое аргумент «данных» из вашего «успешного» обратного вызова? – RyanKeeter

+0

элемент данных, возвращаемый с javascript ниже –

+0

, застегните свой проект, а затем разместите его здесь. Есть несколько возможных причин, по которым он может не работать. Вместо маршрутизации к индексу после выписки ... перенаправляйтесь на страницу входа. Также проверьте, работает ли Html.Render («Вход»). –

ответ

0

Я имел этот вопрос также:

 <div id="login"> 
      @Html.Partial("Login") 
     </div> 

должны быть заменены

 <div id="login"> 
      @Html.Partial("../Account/Login") 
     </div> 

Это значит, что он может найти прямой путь к логину, который вы хотите визуализировать. Это должно решить вашу проблему. Странно, хотя вы не получили никаких ошибок, по крайней мере, 404 на странице «Вход». Я подозреваю, что обработка ошибок была выполнена и не отображается.

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