Перенаправление аутентификации Angular.js не работает с Yeoman Angular-Fullstack

Я использую ngRouter, и у меня проблема с кодом ниже:

# Add Video
.when '/videos/:action',
  templateUrl: 'app/videos/videos-edit/videos-form.html'
  controller: 'VideosEditCtrl'
  authenticate: true

# Edit video
.when '/videos/:action/:year/:month/:slug',
  templateUrl: 'app/videos/videos-edit/videos-form.html'
  controller: 'VideosEditCtrl'
  authenticate: true

Если я перейду на страницу редактирования видео выше и не войду в систему, он перенаправит на страницу входа, как я и хочу. Однако, если я сделаю то же самое для страницы добавления видео, URL-адрес в браузере изменится на страницу входа, но по-прежнему будет отображаться вид для добавления видео.

Я могу удалить аутентификацию: true из контроллера добавления видео, и, похоже, он каким-то образом все еще работает, используя аутентификацию редактирования видео, но я не уверен, почему и как.

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


person Sean    schedule 19.10.2014    source источник


Ответы (1)


Добавьте 'preventDefault()' в app.js.

i.e.

//before
.run(function ($rootScope, $location, Auth) {
// Redirect to login if route requires auth and you're not logged in
$rootScope.$on('$stateChangeStart', function (event, next) {
  Auth.isLoggedInAsync(function(loggedIn) {
    if (next.authenticate && !loggedIn) {
      $location.path('/login');
    }
  });
});

//after
.run(function ($rootScope, $location, $state, Auth) {
// Redirect to login if route requires auth and you're not logged in
$rootScope.$on('$stateChangeStart', function (event, next) {
  Auth.isLoggedInAsync(function(loggedIn) {
    if (next.authenticate && !loggedIn) {
        event.preventDefault();
        $location.path('/login');
    }
  });
});
person Bagofjuice    schedule 30.12.2014