0

我知道这里有很多关于 angularjs 的重定向问题,但到目前为止还没有看到类似的问题,我使用 Rails 作为带有 Devise 的 API 服务器,我可以使用 ajax/json 登录到 Devise,但是当我刷新时一个页面已经登录,我需要登录才能看到它,我收到“重定向循环”错误。像这样: 转到应用程序0.0.0.0:3000/#/,需要登录,所以这会将我重定向到:0.0.0.0:3000/#/login,一旦我登录并被重定向到0.0.0.0:3000/#/,直到一切正常,但如果现在我刷新或转到另一个,让说0.0.0.0:3000/#/events/new,然后做刷新我得到redirect loop错误。

继承人的代码:

应用程序.js

angular.module("eventnote", ['eventServices', 'loginServices', 'pruebaS', 'countrySelect']).config(['$httpProvider', function(provider){
    provider.defaults.headers.common['X-CSRF-Token'] = $('meta[name=csrf-token]').attr('content');
  }]).config(['$httpProvider', function($httpProvider){//start to configure the interceptor
    var interceptor = function($q, $location, $rootScope) {
        return function(promise){
            return promise.then(function(response){return response;}, function(response){
                console.log(response.status);
                if (response.status == 401){//just the 401 responses 
                    $rootScope.$broadcast('event:unathorized');
                    $location.path('/login');
                    return response;
                }
                return $q.reject(response);
            });
        }
    };
    $httpProvider.responseInterceptors.push(interceptor);//add the interceptor
}]).config(["$routeProvider", function($routeProvider){
    $routeProvider.when("/events/new", {templateUrl: 'ang/create.html', controller: NewEventsCtrl})
    .when("/events/:id/edit", {templateUrl: 'ang/edit.html', controller: UpdateCtrl })
    .when("/login", {templateUrl: "ang/login.html", controller: LoginCtrl})
    .when("/", {templateUrl: 'ang/home.html', controller: HomeCtrl})
}]);

控制器.js:

function HomeCtrl ($scope, Prueba) {
    $scope.state = "";
    $scope.obj = Prueba.probar(function(re) { $scope.state = re.mensaje}, function(re){ $scope.state = re.data.error;});
    $scope.error = $scope.obj.error;
}

function LoginCtrl($scope, $location, Login, Logout){
 $scope.user = {}; 

 $scope.login = function(user){
        var u = new Login({user:{email: user.email, password: user.password}});
        u.$log_in(function(result){
            $location.path('/');
        });
 }
}

服务.js:

angular.module('loginServices', ['ngResource'])
.factory('Login', function($resource){
    return $resource('users/sign_in.json', {}, {
        log_in: {method: 'POST'}
    });
}).factory('Logout', function($resource){
    return $resource('users/sign_out.json', {},{
        log_out: {method: 'DELETE'}
    });
});
angular.module('pruebaS', ['ngResource'])
.factory('Prueba', function($resource){
    return $resource('api/prueba', {}, {
        probar: {method: 'GET'}
    });
});

由于问题仅在我登录时发生,我认为它可能是interceptor,因为当我未经身份验证时我可以刷新就好了。希望有人可以帮助我,谢谢...

4

1 回答 1

0

已修复,显然问题出在 rails 路线文件中,我有:

 devise_scope :user do
   root 'devise/sessions#new'
 end

并将其更改为:

devise_scope :user do
 root 'pages#index'
end

不确定这是否我真的需要用户拥有一个根,因为我正在客户端处理所有视图和路由,但现在这确实解决了它,很奇怪,因为我设计在使用 json 格式时不会做 redirect_to 但无论如何.

于 2013-10-31T20:24:32.083 回答