Angular.js身份验证重定向不能与Yeoman Angular-Fullstack一起使用

时间:2014-10-19 21:27:00

标签: angularjs coffeescript yeoman yeoman-generator-angular

我正在使用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

如果我转到上面的编辑视频页面并且我没有登录,它会像我想要的那样重定向到登录页面。但是,如果我对添加视频页面执行相同操作,则浏览器中的网址会更改为登录页面,但仍会显示添加视频的视图。

我可以从添加视频控制器中删除身份验证:true,它似乎仍以某种方式使用编辑视频身份验证,但我不知道为什么或如何。

我想使用一个控制器来添加和编辑视频,因为代码非常相似。我的路由有问题吗?我应该拆开控制器吗?

1 个答案:

答案 0 :(得分:0)

在app.js中添加'preventDefault()'。

//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');
    }
  });
});