3

После курса Джона Папы я создаю SPA и стараюсь, чтобы пользователи добирались до SPA только после проверки Facebook/Google +. Для этого у меня есть два контроллера MCV, контроллер по умолчанию и посадкой называется Home/Index, и это отображает только вводный экран с кнопками входа FB/G +. После использования нажмите одну из кнопок и аутентифицируйте пользователей, затем перейдите на второй контроллер, который является фактической страницей SPA, и имеет div с id = applicationHost и где начинается загрузка оболочки и начинается SPA.SPA с двумя контроллерами MVC

Я использую следующие маршруты JSON массив для отображения моих маршрутов

var routes = [{ 
       url: 'snaps', 
       moduleId: 'viewmodels/snaps', 
       name: 'Snaps', 
       visible: true 
       },{ 
       url: 'places', 
       moduleId: 'viewmodels/places', 
       name: 'Places', 
       visible: true 
      }]; 

Но когда я называю router.map (config.routes) с последующим router.activate ('щелкает')

в маршрутизатор ищет маршрут защелкивается в корне всего приложения

URL, его пытается загрузить это как «локальный: XXXX/Главная/#»

В результате я получаю ошибку 404 от Сэмми.

Когда я вручную загружаюсь, перейдите в 'localhost: XXXX/SPA/Snaps/# Я получаю свое представление без проблем.

Как я могу заставить маршрутизатор искать «привязку» маршрутов и «место» в контроллере SPA MVC, а не в контроллере «Home».

Все это я делаю, чтобы удостовериться, что у меня есть люди, прошедшие проверку подлинности, прежде чем отправлять их в SPA, поэтому, если есть способ сделать аутентификацию в одном из видов SPA, я по существу избежал этой проблемы. Если нет ответа на мой вопрос выше, по крайней мере, если кто-то может пролить свет на то, как я могу сделать аутентификацию пользователя в SPA-обзоре, это тоже будет здорово.

Заранее спасибо

+0

«Взятый ко второму контроллеру» - вы имеете в виду полное обновление страницы справа? IMHO (с тех пор как я его реализовал) «login «должен быть частью самого приложения SPA, так что он является одним из видов. Некоторые моменты: 1.) Создайте веб-API для процедуры входа в систему, вызываемой через ajax. 2.) Украсьте классы контроллеров авторизованным. Таким образом, никакие несанкционированные вызовы не будут успешными. – alpinescrambler

+0

@alpinescrambler спасибо за ваш ответ, да, я делаю полное обновление страницы, но это только в первый раз (во время входа в систему). Я сделал это так, потому что я не мог понять, как сделать аутентификацию Facebook в режиме SPA. Не могли бы вы подробнее рассказать о пункте №. 1 у вас комментарий? Не могли бы вы пролить свет на то, как я могу сделать внешний OAuth с помощью webAPI. Еще раз спасибо. – indichimp

ответ

2

Один из способов заключается установить SPA контроллер в качестве контроллера по умолчанию. Что-то в этом направлении:

System.Web.Routing.RouteTable.Routes.MapRoute(
      name: "SPA", 
      url: "{controller}/{action}/{id}", 
      defaults: new 
      { 
       controller = "SPA", 
       action = "Index", 
       id = UrlParameter.Optional 
      } 
    ); 

Убедитесь, что это первый маршрут MVC, который отображается.

Затем ... В вашем web.config вы можете установить loginUrl на контроллер Landing Controller.

<authentication mode="Forms"> 
    <forms loginUrl="~/Home/Index" timeout="2880" /> 
</authentication> 

Далее .. Украсьте свой контроллер SPA с помощью атрибута Authorize. Все неаутентифицированные запросы к контроллеру SPA будут перенаправлены на loginUrl, который указывает на ваш контроллер Landing

+0

Спасибо за вашу помощь, я попробую это и вернусь. – indichimp

+0

Спасибо, это действительно помогло, оцените его. – indichimp

+0

Рад помочь. –